TsgcWebSocketClient › Methoden › 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 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.

Wenn der Client nicht verbunden ist oder sein WebSocket-Handshake noch nicht abgeschlossen ist, sendet WriteAndWaitData nichts und gibt sofort einen leeren String zurück, statt auf den Timeout zu warten. Der Fehlschlag wird über OnError mit Connection = nil und dem Fehler Data not sent, the client is not connected or its handshake has not completed. gemeldet (resourcestring S_ERROR_CLIENT_NOT_CONNECTED). Das Ereignis wird auf dem aufrufenden Thread ausgelöst, bevor die Methode zurückkehrt, und LastError enthält denselben Text. Es wird keine Ausnahme an den Aufrufer weitergegeben, und der Client wird nicht getrennt. Setzen Sie Options.RaiseDisconnectExceptions auf False, um diese Meldung zu überspringen. Wenn ein Schreibvorgang fehlschlägt, weil seine Verbindung verloren ging und der Client bereits erneut verbunden ist, wird der Fehlschlag ebenfalls mit Connection = nil gemeldet, sodass die neue Verbindung geöffnet bleibt.

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 Server nicht rechtzeitig antwortet; Ausnahmen werden abgefangen und an OnError weitergeleitet. Wenn der Client nicht verbunden ist oder sein Handshake noch nicht abgeschlossen ist, gibt die Methode sofort nil zurück, ohne auf den Timeout zu warten, und meldet den Fehlschlag über OnError mit Connection = nil, wie für die Text-Überladung beschrieben. 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