Einzelnen Beitrag anzeigen

mjustin

Registriert seit: 14. Apr 2008
3.003 Beiträge
 
Delphi 2009 Professional
 
#9

AW: indy Server und Client komponente

  Alt 8. Feb 2012, 16:58
Hier die stromsparende Variante, nach http://stackoverflow.com/a/544473/80901 (unter Berücksichtigung der Anmerkungen von Remy Lebeau):

Delphi-Quellcode:
procedure TFormMain.IdTCPServerExecute(AContext: TIdContext);
var
  RxBuf: TIdBytes;
begin
  RxBuf := nil;
  with AContext.Connection.IOHandler do
  begin
    if InputBufferIsEmpty then
    begin
      CheckForDataOnSource(10);
    
      if InputBufferIsEmpty then
      begin
        Exit;
      end;

      InputBuffer.ExtractToBytes(RxBuf);

      // process RxBuf as needed...

    end;
  end;
end;
p.s. in diesem Beispiel sendet der Client einen Request, der dann vom Server verarbeitet wird.

Es kann aber im OnExecute Handler als erstes eine Nachricht an den Client gesendet werden. Zum Beispiel, wenn der Server eine interne Queue von Daten hat, die er nach und nach an den Client senden soll.

In diesem Fall würde der OnExecute Handler anders aufgebaut:

* hole ein Element aus der Queue
* falls kein Element vorhanden war, Exit
* sonst: schreibe die Daten an den Client - AContext.Connection.IOHandler.WriteLn(Daten);
* fertig (es sei denn, eine "synchrone" Quittung des Clients wird benötigt, dann weiter mit CheckForDataOnSource(TimeOut);
Michael Justin
habarisoft.com

Geändert von mjustin ( 9. Feb 2012 um 13:53 Uhr)
  Mit Zitat antworten Zitat