Delphi-Quellcode:
procedure TStringServerForm.IdTCPServer1Execute(AContext: TIdContext);
var
LLine: String;
ID: Integer;
begin
if IdTCPServer1.Active then
begin
//TIdNotify.NotifyMethod( ShowStartServerdMessage );
//LLine := AContext.Connection.IOHandler.ReadLn(TIdTextEncoding.Default);
ID := Integer(AContext.Connection.Socket);
LLine := AContext.Connection.IOHandler.ReadLn();
Memo1.Lines.Add(Format('[%.10d]: %s', [ID, LLine]));
AContext.Connection.IOHandler.WriteLn('OK');
//TIdNotify.NotifyMethod( StopStartServerdMessage );
end;
AContext.Connection.IOHandler.CheckForDisconnect(False, True);
AContext.Connection.CheckForGracefulDisconnect(False);
end;
Die Execute Methode wird innerhalb eines Serverthreads ausgeführt, daher sind direkte Zugriffe auf
VCL Komponenten nicht sauber, da diese nicht threadsicher sind. Anstatt direkt auf Memo1 zuzugreifen kann zum Beispiel mit TThread.Queue das Logging in Memo1 threadsicher erfolgen.
Das "if IdTCPServer1.Active" then ist nicht erforderlich, da der Server den Eventhandler nicht mehr aufrufen wird wenn Active := False ist.