TsgcWebSocketClient › Metody › WriteAndWaitData
Wysyła wiadomość tekstową i blokuje wywołującego do momentu, gdy serwer odpowie wiadomością tekstową lub upłynie limit czasu.
function WriteAndWaitData(const aText: String; const aTimeout: Integer = 10000): string;
| Nazwa | Typ | Opis |
|---|---|---|
aText | const String | Ładunek tekstowy do wysłania do serwera jako ramka tekstowa WebSocket. |
aTimeout | const Integer | Maksymalny czas oczekiwania na odpowiedź serwera w milisekundach. Domyślnie 10000 (10 sekund). |
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)
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.
vReply := oClient.WriteAndWaitData('ping', 5000);
if vReply <> '' then
ShowMessage(vReply);
function WriteAndWaitData(const aStream: TStream; const aSize: Integer = 0; const aStreaming: TwsStreaming = stmNone; const aTimeout: Integer = 10000) : TStream;
| Nazwa | Typ | Opis |
|---|---|---|
aStream | const TStream | Strumień źródłowy, którego zawartość zostanie wysłana jako binarna ramka WebSocket. Wywołujący pozostaje właścicielem strumienia. |
aSize | const Integer | Opcjonalny 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. |
aStreaming | const TwsStreaming | Tryb strumieniowania dla pofragmentowanej transmisji (stmNone, stmStart, stmContinue, stmFinish). Domyślnie stmNone, co wysyła kompletną, samodzielną wiadomość. |
aTimeout | const Integer | Maksymalny czas oczekiwania na odpowiedź serwera w milisekundach. Domyślnie 10000 (10 sekund). |
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)
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.
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;