AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Wo im Client auf Nachrichten vom Server warten?
Thema durchsuchen
Ansicht
Themen-Optionen

Wo im Client auf Nachrichten vom Server warten?

Ein Thema von QuickAndDirty · begonnen am 22. Jan 2025 · letzter Beitrag vom 3. Feb 2025
 
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.985 Beiträge
 
Delphi 12 Athens
 
#1

Wo im Client auf Nachrichten vom Server warten?

  Alt 22. Jan 2025, 13:06
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.
Andreas
Monads? Wtf are Monads?

Geändert von QuickAndDirty (22. Jan 2025 um 13:10 Uhr)
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:58 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz