Einzelnen Beitrag anzeigen

Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#1

Wieso wird OnDisconnect mehrfach ausgeführt?

  Alt 16. Okt 2005, 09:01
Moin,

ich habe folgendes:

Delphi-Quellcode:
procedure TServServ.TimerHandler(Sender: TObject);
var
  I: Integer;
begin
  for I := FUserList.Count-1 downto 0 do
    if (TUser(FUserList.Items[I]).FLastMessage + FSessionTimeout) < GetTickCount then
      TUser(FUserList.Items[I]).FSocket.Close;
end;

function TServServ.UserBySock(Socket: TCustomWinSocket): TUser;
var
  I: Integer;
begin
  Result := nil;
  for I := 0 to FUserList.Count-1 do
    if TUser(FUserList.Items[I]).FSocket = Socket then
      Result := TUser(FUserList.Items[I]);
end;

procedure TServServ.ClientDisconnect(Sender: TObject; ASocket: TCustomWinSocket);
begin
  messagebox(0, pchar(inttostr(FUserList.Count)), 'hi', 0);
  FUserList.Remove(UserBySock(ASocket));
end;
Die MessageBox ist nur Testweise drin. Es handelt sich hier um einen ServerSocket. Wenn ich auf diesen mit einem Client verbinde, wird dieser nach 5 Sekunden disconnectet (FLastMessage + FSessionTimeout) < GetTickCount), das Problem ist, dass nach diesen 5 Sekunden unendlich MessageBoxen (aus der ClientDisconnect prozedur) aufpoppen, dass muss heissen, dass das Timer event ewig einen User findet der länger als 5 Sekunden verbunden ist, das wiederrum muss heissen, dass obwohl der User bereits disconnected ist, sein Objekt in der Userlist noch existiert.... wie aber kann das sein? ich lösche es doch: "FUserList.Remove(UserBySock(ASocket));"

Hm.... vielleicht hat ja jemand nen Tipp
Mario
MSN: cyanide@ccode.de
  Mit Zitat antworten Zitat