Hallo Olli73,
Zitat:
Da der Context im OnDisconnect als Parameter angegeben wird, ist klar, dass er noch nicht freigegeben sein kann.
Das ist logisch - habe ich nicht beachtet...
Zitat:
Da du aber den freigegebenen Context als Parameter hast, kannst du diesen ja "Ignorieren".
Das hört sich gut an! Bin ich nicht drauf gekommen...
Ich habe es jetzt so gelöst, dass ich im OnDisconnect AContext übergebe und im OnConnect nicht. Damit klappt es gut!
Delphi-Quellcode:
procedure TTCPSrvr.ReadLookList(Cols: TCols; var Rows: TRows; AContext: TIdContext = nil);
var List: TIdContextList;
I: integer;
exPeerIP: string;
exPeerPort: integer;
begin
SetLength(Rows, Length(Cols), 1);
Rows[0,0]:= 'Alle';
Rows[1,0]:= 'Alle';
Rows[2,0]:= 'Alle';
Try
if Assigned(AContext) then begin
exPeerIP:= AContext.Binding.PeerIP;
exPeerPort:= AContext.Binding.PeerPort;
end;
List:= fIdTCPServer.Contexts.LockList;
for I := 0 to List.Count -1 do begin
if (TIdContext(List[I]).Binding.PeerPort <> exPeerPort) then 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;
end;
Finally
fIdTCPServer.Contexts.UnlockList;
End;
end;
Vielen Dank!
LG Patrick