Einzelnen Beitrag anzeigen

mjustin

Registriert seit: 14. Apr 2008
3.006 Beiträge
 
Delphi 2009 Professional
 
#6

AW: IdTCPServer/IdTCPClient: Verbindung ablehnen?

  Alt 27. Apr 2013, 12:48
Client -> Server: "LOGIN username, passwort"#13#10
Und wenn der Client nichts sendet, nachdem er sich Verbunden hat? Wie breche ich die Verbindung ab, wenn der Client nichts sendet?
Nach dem Verbindungsaufbau wird von Indy "sofort" die OnExecute Methode aufgerufen.

In dieser würde ich auch die erste Aktion des Servers unterbringen, das Warten auf die erste Nachricht (zum Beispiel Login).

Also in etwa (ungetestet):

Delphi-Quellcode:
procedure TMyIdTCPServer.OnExecute(AContext: TIdContext);
var
  Msg: string;
begin
  if not TMyContext(AContext).LoggedIn then
  begin
    // warte maximal 2000 Millisekunden
    Msg := AContext.Connection.IOHandler.ReadLn(2000);
    // Zeitüberschreitung?
    if AContext.Connection.IOHandler.ReadLnTimedOut then
    begin
      // lasse Indy die Connection beenden
      raise EIdException.Create('Received no login message');
    end else begin
      // prüfe, ob Login gültig und setze AContext.LoggedIn
      ...
    end;
  end
  else
  begin
    // bereits angemeldet, andere Aktionen ausführen
  end;
end;
AContext ist dabei eine anwendungsspezifische Unterklasse von TIdServerContext, in der die Property IsLoggedIn enthalten ist.
Michael Justin
habarisoft.com
  Mit Zitat antworten Zitat