AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Software Design einer Server Anwendung

Ein Thema von Deltachaos · begonnen am 16. Jun 2010 · letzter Beitrag vom 19. Jun 2010
 
Benutzerbild von LH_Freak
LH_Freak

Registriert seit: 2. Mär 2005
Ort: Nürnberg
222 Beiträge
 
#4

AW: Software Design einer Server Anwendung

  Alt 19. Jun 2010, 09:03
Hey,
also ich schreib mir für sowas immer eine eigene Klasse mit einer Liste drin.
Also
Delphi-Quellcode:
type
  TClientList = class
  private
    fList: TList;

    function SidToIndex(sid: integer): integer; // gibt den Index des Clients mit der Sid zurück
    
    function getClient(sid: integer): TMainClient;
    procedure setClient(sid: integer; value: TMainClient);
  public
    constructor Create; overload; // Hier muss fList erstellt werden
    destructor Destroy; override; // fList.Free!

    function SidOfClient(aClient: TMainClient): integer; // gibt die Sid eines Clients zurück
    // ...

    property Client[sid: integer]: TMainClient read getClient write setClient; default;
  end;
Ich habe jetzt Prozeduren fürs Hinzufügen von Clients weggelassen, das sollte eigentlich kein Problem sein. Entweder einfach den Client übergeben und er fügt ihn in der Liste ein, oder dass man einzelne Parameter übergibt und er erstellt daraus einen TMainClient und fügt ihn in die Liste ein.
Man kann natürlich auch beides machen
Die anderen Funktionen kannst du so implementieren, funktioniert bei mir immer ganz gut so:

Delphi-Quellcode:
function TClientList.SidToIndex(sid: integer): integer;
begin
  for result := 0 to fList.Count-1 do
    if TMainClient(fList[result]).Sid = sid then exit;
  result := -1;
end;

function TClientList.SidOfClient(aClient: TMainClient): integer;
var aSid: integer;
begin
  aSid := SidToIndex(aClient.sid);
  if aSid = -1 then
    result := -1
  else
    result := Client[aSid].sid;
end;

function getClient(sid: integer): TMainClient;
var id: integer;
begin
  id := SidToIndex(sid);
  if id = -1 then exit;
  
  result := TMainClient(fList[id]);
end;

procedure setClient(sid: integer; value: TMainClient);
var id: integer;
begin
  id := SidToIndex(sid);
  if id = -1 then exit;
  
  fList[id] := value;
end;
Jetzt hast du das Problem mit dem Overhead nicht mehr, und du kannst z.B. auch einbauen, dass für den Fall, dass ein Client die Verbindung trennt, der Eintrag dazu automatisch gelöscht wird usw. (so mach ich das atm beim Versuch einen XMPP Server zu basteln).
Durch so eine Klasse bist du viel flexibler als über ein dynamisches Array.

Gruß
LH_Freak
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:50 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz