Ich will in einem TIDTCPClient Dauerhaft eine Verbindung zum TCPServer halten und auf Messages vom Server warten.
Wo mache ich das am besten?
Brauche ich dafür einen eigenen thread oder passiert das schon alles in IndyThreads?
Zurzeit Habe ich einen kleinen Handshake in OnClientConnect
der so aussieht.
Delphi-Quellcode:
procedure TFTAPPRCMain.OnClientConnected(Sender: TObject);
begin
var ClientLeaseRequest :TClientLeaseRequestMessage;
ClientLeaseRequest.Init;
ClientLeaseRequest.LeaseKey := LEASEKEY;
RClient.IOHandler.Write(ClientLeaseRequest.ToIdBytes);
If RClient.IOHandler.InputBufferIsEmpty then
Begin
RClient.IOHandler.CheckForDataOnSource(1000);
RClient.IOHandler.CheckForDisconnect;
if RClient.IOHandler.InputBufferIsEmpty then
Exit;
end;
var IDbytes:TidBytes;
RClient.IOHandler.InputBuffer.ExtractToBytes(IDbytes);
var ClientLeaseResponse :TClientLeaseResponseMessage;
ClientLeaseResponse.LoadFromIDBytes(IDbytes);
If (ClientLeaseResponse.MSGType = $0002 ) and
(ClientLeaseResponse.MagicCookie = MagicCookie) and
(ClientLeaseResponse.MSGVersion = 1) then
Begin
LeaseCode := ClientLeaseResponse.MSGReturnCode;
TThreadedLog.LogD('ClientLeaseResponse ReturnCode ='+ClientLeaseResponse.MSGReturnCode.ToString);
// Soll Ich hier ne "While Active" schleife mit
// Sowas in der Art platzieren?
(*
While Active do
Begin
If RClient.IOHandler.InputBufferIsEmpty then
Begin
RClient.IOHandler.CheckForDataOnSource(1000);
RClient.IOHandler.CheckForDisconnect;
if RClient.IOHandler.InputBufferIsEmpty then
Continue;
end;
var IDbytes:TidBytes;
RClient.IOHandler.InputBuffer.ExtractToBytes(IDbytes);
Logik(IDBytes); // Oder TLogikthread.create(IDbytes).start; ???
end;
*)
End;
end;
Oder sollte ich die Ganze Schleife zum warten auf Nachrichten in einen anderen Thread packen statt in OnClientConnected?
Passiert OnClientConnected im Hauptthread oder in einem
Indy Thread?
Ich weiß, dass ich das alles durch Experimente rauskriegen kann...es wäre halt nur toll wenn einer das alles wüsste und ich es gleich richtig machen könnte.