Hallo Zusammen,
ich kann nicht herausfinden, wann die LockList von verbundenen Clients bei einem TIdTCPServer aktualisiert wird.
Ich möchte eine aktuelle Liste mit den
IP-Adressen und PeerPorts der Clients auf der Oberfläche darstellen.
Wenn sich ein Client verbindet, klappt das im OnConnect Event wunderbar mit:
Delphi-Quellcode:
procedure TTCPSrvr.ReadLookList(Cols: TCols; var Rows: TRows);
var List: TIdContextList;
I: integer;
begin
SetLength(Rows, Length(Cols), 1);
Rows[0,0]:= 'Alle';
Rows[1,0]:= 'Alle';
Rows[2,0]:= 'Alle';
Try
List:= fIdTCPServer.Contexts.LockList;
for I := 0 to List.Count -1 do begin
SetLength(Rows, Length(Cols), Length(Rows[0]) +1);
Rows[0, Length(Rows[0]) -1]:= TIdContext(List[I]).Binding.PeerIP;
Rows[1, Length(Rows[0]) -1]:= IntToStr(TIdContext(List[I]).Binding.PeerPort);
Rows[2, Length(Rows[0]) -1]:= ' ';
end;
Finally
fIdTCPServer.Contexts.UnlockList;
End;
end;
Leider scheint das OnDisconnect Event aber abzulaufen, bevor die LockList aktualisiert wird, sodass der Client, der sich gerade abgemeldet hat, noch in der Liste erscheint. Wenn sich der nächste Client abmeldet, wird der vorherige abgemeldete Client nicht mehr angezeigt, der aktuell sich abgemeldete steht noch drin.
Weiß jemand, wann die LockList aktualisiert wird, sodass ich die LockList erst nach der Aktualisierung auslesen kann?
Vielen Dank
Patrick