Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Indy10 threaded, queued (https://www.delphipraxis.net/192882-indy10-threaded-queued.html)

hzzm 30. Mai 2017 12:11

Indy10 threaded, queued
 
Moin,

ich versuche gerade, einen queue in meine INdy10-Verbindung einzubauen.
Dazu lese ich diesen SO Beitrag und sehe, wie Remy das queuen der Befehle mit einer TIdThreadSafeStringList loest:
Code:
procedure TMaster.IdTCPServer1Execute(AContext: TIdContext);
var
  Queue: TIdThreadSafeStringList;
  List: TStringList;
  Tmp: TStringList;
  I: Integer;
begin
  ...
  Queue := TIdThreadSafeStringList(AContext.Data);
  List := Queue.Lock;
  try
    if List.Count > 0 then
    begin
      Tmp := TStringList.Create;
      try
        Tmp.Assign(List);
        List.Clear;
      except
        Tmp.Free;
        raise;
      end;
    end;
  finally
    Queue.Unlock;
  end;
  if Tmp <> nil then
  try
    AContext.Connection.IOHandler.Write(Tmp, False);
  finally
    Tmp.Free;
  end;
  ...
end;
Mein Problem ist: Wie sieht das Gegenstueck zu diesem Queue auf Client-Seite aus?

IdTCPClient1 hat ja keinen 'AContext' (natuerlich nicht), in dem AContext.Data diese Liste sein koennte...

mjustin 30. Mai 2017 12:39

AW: Indy10 threaded, queued
 
So in der Art?

Delphi-Quellcode:
SL: TStrings;

...

SL := TStringList.Create;

...

IdClient.IOHandler.ReadStrings(SL);

...
Da man aber immer das Encoding angeben sollte, ist es besser, auf Server und Client das Text-Encoding fest anzugeben, im Client zum Beispiel so:

Delphi-Quellcode:
ReadStrings(SL, -1, IndyTextEncoding_UTF8);

hzzm 31. Mai 2017 10:11

AW: Indy10 threaded, queued
 
Ah, ja Danke!

Nochmal eine Verstaendnisfrage:

AContext.Data sind alle Daten insgesamt, die noch nicht gelesen wurden?
(unabhaengig davon, ob man das nachher in ein beliebiges TObject castet...)

hzzm 1. Jun 2017 12:09

AW: Indy10 threaded, queued
 
Was mir gerade noch aufstoesst:

TIdThreadSafeStringList kann nicht per Index auf die Strings zugreifen. Was soll das denn?
Ich muss doch irgendwie nur den ersten Befehl/String lesen koennen, um daraus eine Art lockbaren FIFO-Puffer zu bauen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:49 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz