TsgcWebSocketClientMethoden › WriteAndWaitData

WriteAndWaitData Methode

Sendet eine Textnachricht und blockiert den Aufrufer, bis der Server mit einer Textnachricht antwortet oder das Timeout abläuft.

Überladungen

Overload 1

Syntax

function WriteAndWaitData(const aText: String; const aTimeout: Integer = 10000): string;

Parameter

NameTypBeschreibung
aTextconst StringDie Textnutzlast, die als WebSocket-Text-Frame an den Server gesendet werden soll.
aTimeoutconst IntegerMaximale Zeit in Millisekunden, die auf die Serverantwort gewartet wird. Standard ist 10000 (10 Sekunden).

Rückgabewert

Die vom Server empfangene Textnachricht oder eine leere Zeichenfolge, wenn das Timeout abgelaufen ist, keine Verbindung verfügbar war oder ein Fehler auftrat. (string)

Hinweise

WriteAndWaitData ist ein Komforthelfer für Austauschvorgänge im Request/Response-Stil über einen WebSocket. Es sendet den Text-Frame und blockiert dann den aufrufenden Thread an einem internen Ereignis, bis die nächste Textnachricht vom Server eintrifft oder der Timeout ausgelöst wird. Da es blockiert, sollte es nicht aus dem Haupt-UI-Thread aufgerufen werden, es sei denn, es wird ein kurzer Timeout verwendet. Ein leerer String wird zurückgegeben, wenn der Client nicht verbunden ist oder wenn der Server nicht rechtzeitig antwortet; Ausnahmen auf Socket-Ebene werden abgefangen und an OnError weitergeleitet. Verwenden Sie die Stream-Überladung, wenn Sie binäre Nutzdaten senden und empfangen müssen.

Beispiel


vReply := oClient.WriteAndWaitData('ping', 5000);
if vReply <> '' then
  ShowMessage(vReply);

Überladung 2

Syntax

function WriteAndWaitData(const aStream: TStream; const aSize: Integer = 0; const aStreaming: TwsStreaming = stmNone; const aTimeout: Integer = 10000) : TStream;

Parameter

NameTypBeschreibung
aStreamconst TStreamQuellstream, dessen Inhalt als WebSocket-Binär-Frame gesendet wird. Der Aufrufer bleibt der Eigentümer des Streams.
aSizeconst IntegerOptionale Fragmentgröße in Bytes; wenn größer als null, wird der ausgehende Stream in mehrere Fragmente dieser Größe aufgeteilt. Verwenden Sie 0 (der Standard), um den gesamten Stream als einzelnen Frame zu senden.
aStreamingconst TwsStreamingStreaming-Modus für die fragmentierte Übertragung (stmNone, stmStart, stmContinue, stmFinish). Standard ist stmNone, was eine vollständige eigenständige Nachricht sendet.
aTimeoutconst IntegerMaximale Zeit in Millisekunden, die auf die Serverantwort gewartet wird. Standard ist 10000 (10 Sekunden).

Rückgabewert

Ein neu zugewiesener Stream, der die vom Server empfangene Binärnachricht enthält, oder nil, wenn das Timeout abgelaufen ist, keine Verbindung verfügbar war oder ein Fehler aufgetreten ist. Der Aufrufer ist für das Freigeben des zurückgegebenen Streams verantwortlich. (TStream)

Hinweise

Dieser Overload ist das binäre Gegenstück zum Text-anderen Overload. Es schreibt den übergebenen Stream als binären Frame und blockiert dann den aufrufenden Thread an einem internen Ereignis, bis die nächste binäre Nachricht vom Server eintrifft oder das Timeout greift. Da es blockiert, sollten Sie es nicht aus dem Haupt-UI-Thread mit einem langen Timeout aufrufen. Der Rückgabewert ist nil, wenn der Client nicht verbunden ist oder der Server nicht rechtzeitig antwortet; Ausnahmen werden abgefangen und an OnError weitergeleitet. Geben Sie sowohl den Quell-Stream (nach dem Aufruf) als auch den zurückgegebenen Stream frei, wenn Sie damit fertig sind.

Beispiel


oRequest := TMemoryStream.Create;
try
  oRequest.LoadFromFile('request.bin');
  oReply := oClient.WriteAndWaitData(oRequest, 0, stmNone, 5000);
  try
    if Assigned(oReply) then
      oReply.SaveToFile('reply.bin');
  finally
    oReply.Free;
  end;
finally
  oRequest.Free;
end;

Zurück zu Methoden