Einzelnen Beitrag anzeigen

Benutzerbild von thkerkmann
thkerkmann

Registriert seit: 7. Jan 2006
Ort: Pulheim Brauweiler
464 Beiträge
 
Delphi 2010 Professional
 
#6

Re: Tclient disconnect problem

  Alt 26. Aug 2007, 16:05
Ja, ich verstehe schon was du willst.
Ich habe ein ähnliches Problem folgendermaßen gelöst.

Delphi-Quellcode:
procedure TGUIServerWin.ClientsSocket2ClientConnect(Sender: TObject;
  Socket: TCustomWinSocket);
var
  aSession: tSession;
  Id: string;
begin
  id := Socket.RemoteAddress + ':' + IntToHex(Socket.RemotePort, 4);
  DebugOut('ClientsSocketClientConnect: ' + Id);

  aSession := tSession.Create(Socket, 0);
  aSession.OnData := OnSessionData;
  aSession.KbdOn := not kbdrestricted;
  aSession.FlashReady := not bFlash;

  lbClients.Items.AddObject(Id, aSession); // ich hab ne listbox genommen
end;
TSession ist eine Klasse, die ein paar Informationen zu der Verbindung hält.

Wenn jetzt eine Verbinung beendet wird kommt folgendes:
Delphi-Quellcode:
procedure TGUIServerWin.ClientsSocket2ClientDisconnect(Sender: TObject;
  Socket: TCustomWinSocket);
var
  i: integer;
  aSession: tSession;
  Id: string;
begin
  id := Socket.RemoteAddress + ':' + IntToHex(Socket.RemotePort, 4);
  try
    i := lbClients.Items.IndexOf(Id);
    if i >= 0 then
    begin
      aSession := tSession(lbClients.Items.Objects[i]);
      try
        lbClients.Items.Delete(i); // löschen des Listboxeintrages
      except
        on E: exception do
          Debugout(E.message);
      end;
      aSession.Free; // Session objekt freigeben
    end
    else
      DebugOut('Socket not found in Sessionlist ' + Id);
  except
    on E: Exception do
      DebugOut('EXCEPTION in ClientsSocketSessionClosed: ' + E.Message);
  end;
end;
Genause verfahre ich im OnRead und OnError - über die Id kann ich das Session Objekt holen und meine damit verbundenen Daten.

Gruss
Thomas Kerkmann
Ich hab noch einen Koffer in Borland.
http://thomaskerkmann.wordpress.com/
  Mit Zitat antworten Zitat