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 22. Jan 2025
Antwort Antwort
QuickAndDirty

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

Wo im Client auf Nachrichten vom Server warten?

  Alt Heute, 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 (Heute um 13:10 Uhr)
  Mit Zitat antworten Zitat
Neumann

Registriert seit: 6. Feb 2006
Ort: Moers
539 Beiträge
 
Delphi 12 Athens
 
#2

AW: Wo im Client auf Nachrichten vom Server warten?

  Alt Heute, 13:39
Eigentlich ist es einfacher wenn der Client nachfragt ob es was neues gibt.
Er kann ja z.B. alle 10s fragen oder auch wenn er neue Daten haben will.
Ralf
Gruß vom Niederrhein
  Mit Zitat antworten Zitat
QuickAndDirty

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

AW: Wo im Client auf Nachrichten vom Server warten?

  Alt Heute, 14:10
Es ist schon notwendig die Leitung offen zu halten, sonnst muss ich eine Speicherlösung für den Server bauen.
Es sollen interaktiv Daten weitergeleitet werden.
Andreas
Monads? Wtf are Monads?

Geändert von QuickAndDirty (Heute um 14:13 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


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 16:53 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