Also ich habs in etwa so gemacht.
Bischen Bastelcode: Auszug!!
Und Teile meines Projects...
Delphi-Quellcode:
const
MaxAnzCon=100;
Type
TAInt=array[0..MaxAnzCon] of Integer;
Type
TClientenverwaltung=record
Con : TAInt; // Socketnummer
HNr : TAInt; // dazugehörige Handlenummer
isOnline :array [0..MaxAnzCon] of boolean; // ist er auch noch online
end;
.....
CV:TClientenverwaltung;
// CV ( Clientverwaltung) Array mit Anfangswerten beschreiben
procedure TNet7Server.Init;
(* -------------------------------------------------------------------------- *)
var
i: Integer;
begin
// Serverliste mit Wert -1 füllen
for i := 0 to MaxAnzCon do
begin
cv.Con[i] := -1;
cv.HNr[i] := -1;
cv.isOnline[i] := false;
end;
end;
//Clienten in Liste aufnehem bei Event ClientonConnect funktionsfähig
procedure TNet7Server.ClientOnList;
(* -------------------------------------------------------------------------- *)
var
LZaehler: Integer;
begin
LZaehler := 0;
//zähle solange hoch bis du einen freien Paltz (-1) in der Liste findes
while cv.HNr[LZaehler] > -1 do
begin
inc(LZaehler);
end;
cv.HNr[LZaehler] := socket.Connections[socket.ActiveConnections-1].Handle;
cv.isOnline[LZaehler] := true;
cv.Con[LZaehler] := socket.ActiveConnections-1;
end;
Ich hoffe der Code hilft dir weiter, die Überwachung ob der Client Online ist bzw seine Löschung geb ich dir noch nicht... "Sebst ist der Mann" aber wenn du da irgendwie hängenbleibst geb ich dir gerne wieder Tipps
Über den Aufruf des Records also cv[x].bla hast du die Socketnummer, die Handlenummer und umgekehrt...
mfg Net7
// Edit: Einen Stolperstein möchte ich ich dir noch ersparen.
Bedenke!!!!!
Sobald ein Client offline geht rutscht die Socketnummer einen Wert tiefer und die gespeicherte Handlenummer im Record stimmt mit der Socketnummer im Record nicht mehr überein.