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.