Eins kapiere ich nocht nicht ganz.
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;
Und zwar nehmen wir an, der Client ist LoggedIn und dann bricht die Verbindung plötzlich ab, warum auch immer. Dann ist der AContext, mit dem im o.g. Beispiel TMyContext identifiziert wird, nicht mehr gültig oder verstehe ich das falsch? Der Client stellt die Verbindung wieder her und bekommt einen neuen AContext zugewiesen. Wenn das so ist, wofür dann die
if not TMyContext(AContext).LoggedIn
? Natürlich kann ich hinter LoggenIn-Property eine Funktion bauen, die überprüft, ob der Client bereits eingeloggt ist. Dafür benotige ich aber wiederum die Login-Daten des Clients, die erst in
Msg := AContext.Connection.IOHandler.ReadLn(2000)
abgefragt werden.