TsgcWebSocketClientMetody › WriteAndWaitData

WriteAndWaitData Metoda

Wysyła wiadomość tekstową i blokuje wywołującego do momentu, gdy serwer odpowie wiadomością tekstową lub upłynie limit czasu.

Przeciążenia

Przeciążenie 1

Składnia

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

Parametry

NazwaTypOpis
aTextconst StringŁadunek tekstowy do wysłania do serwera jako ramka tekstowa WebSocket.
aTimeoutconst IntegerMaksymalny czas oczekiwania na odpowiedź serwera w milisekundach. Domyślnie 10000 (10 sekund).

Wartość zwracana

Wiadomość tekstowa odebrana od serwera lub pusty ciąg znaków, gdy upłynął limit czasu, nie było dostępnego połączenia lub wystąpił błąd. (string)

Uwagi

WriteAndWaitData to wygodna metoda pomocnicza do wymiany żądanie/odpowiedź przez WebSocket. Wysyła ramkę tekstową, a następnie blokuje wątek wywołujący na wewnętrznym zdarzeniu do momentu przybycia kolejnej wiadomości tekstowej z serwera lub upłynięcia limitu czasu. Ponieważ metoda blokuje wątek, nie należy jej wywoływać z głównego wątku UI, chyba że używany jest krótki limit czasu. Jeśli klient nie jest połączony lub serwer nie odpowie w czasie, zwracany jest pusty ciąg znaków; wyjątki na poziomie gniazda są przechwytywane i przekazywane do OnError. W celu wysyłania i odbierania binarnych ładunków należy użyć przeciążenia strumieniowego.

Przykład


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

Przeciążenie 2

Składnia

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

Parametry

NazwaTypOpis
aStreamconst TStreamStrumień źródłowy, którego zawartość zostanie wysłana jako binarna ramka WebSocket. Wywołujący pozostaje właścicielem strumienia.
aSizeconst IntegerOpcjonalny rozmiar fragmentu w bajtach; gdy jest większy od zera, wychodzący strumień jest dzielony na wiele fragmentów o tym rozmiarze. Wartość 0 (domyślna) powoduje wysłanie całego strumienia jako pojedynczej ramki.
aStreamingconst TwsStreamingTryb strumieniowania dla pofragmentowanej transmisji (stmNone, stmStart, stmContinue, stmFinish). Domyślnie stmNone, co wysyła kompletną, samodzielną wiadomość.
aTimeoutconst IntegerMaksymalny czas oczekiwania na odpowiedź serwera w milisekundach. Domyślnie 10000 (10 sekund).

Wartość zwracana

Nowo przydzielony strumień zawierający wiadomość binarną otrzymaną z serwera lub nil, gdy upłynął limit czasu, brak było dostępnego połączenia lub wystąpił błąd. Wywołujący jest odpowiedzialny za zwolnienie zwróconego strumienia. (TStream)

Uwagi

To przeciążenie jest binarnym odpowiednikiem tekstowego drugiego przeciążenia. Zapisuje dostarczony strumień jako binarną ramkę, a następnie blokuje wątek wywołujący na wewnętrznym zdarzeniu do momentu odebrania następnej binarnej wiadomości od serwera lub upłynięcia limitu czasu. Ponieważ metoda blokuje wykonanie, należy unikać jej wywoływania z głównego wątku interfejsu przy długim limicie czasu. Wartość zwracana to nil, gdy klient nie jest połączony lub serwer nie odpowiada w czasie; wyjątki są przechwytywane i przekazywane do OnError. Należy zwolnić zarówno strumień źródłowy (po wywołaniu), jak i zwrócony strumień po zakończeniu pracy z nimi.

Przykład


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;

Powrót do metod