TsgcWebSocketClient › Metody › WriteData

WriteData Metoda

Wysyła wiadomość tekstową do serwera WebSocket, opcjonalnie dzieląc ją na fragmenty o podanym rozmiarze.

Przeciążenia

Przeciążenie 1

Składnia

procedure WriteData(const aText: String; const aSize: Integer = 0; const aStreaming: TwsStreaming = stmNone);

Parametry

NazwaTypOpis
aTextconst StringŁadunek tekstowy do wysłania do serwera jako ramka tekstowa WebSocket.
aSizeconst IntegerOpcjonalny rozmiar fragmentu w bajtach; gdy jest większy od zera, wiadomość jest dzielona na wiele fragmentów o tym rozmiarze. Użyj wartości 0 (domyślnie), aby wysłać całą wiadomość jako jedną ramkę.
aStreamingconst TwsStreamingTryb strumieniowania dla pofragmentowanej transmisji (stmNone, stmStart, stmContinue, stmFinish). Domyślnie stmNone, co wysyła kompletną, samodzielną wiadomość.

Uwagi

WriteData przesyła ciąg jako ramkę tekstową WebSocket w aktywnym połączeniu. Domyślnie wywołanie jest wykonywane w wątku wywołującym i kończy się po przekazaniu bajtów do gniazda. Gdy QueueOptions.Text jest ustawione na wartość inną niż qmNone, wiadomość jest kolejkowana i faktycznie wysyłana z własnego wątku połączenia, co zapobiega blokadom w przypadku równoczesnego zapisu przez kilka wątków. Wszelkie wyjątki gniazda są przekazywane do OnError. W przypadku wysyłania dużych ładunków lub danych binarnych należy użyć przeciążenia strumieniowego.

Gdy klient nie jest połączony lub jego handshake WebSocket nie został jeszcze zakończony, nic nie jest wysyłane, a błąd jest zgłaszany przez OnError z Connection = nil i komunikatem Data not sent, the client is not connected or its handshake has not completed. (resourcestring S_ERROR_CLIENT_NOT_CONNECTED). Zdarzenie jest wywoływane w wątku wywołującym, zanim WriteData zwróci sterowanie, a LastError zawiera ten sam tekst. Do wywołującego nie jest zgłaszany żaden wyjątek i klient nie zostaje rozłączony. Ustaw Options.RaiseDisconnectExceptions na False, aby pominąć to zgłoszenie i po cichu odrzucić wiadomość, tak jak robiły to wcześniejsze wersje. Gdy zapis kończy się niepowodzeniem, ponieważ jego połączenie zostało utracone, a klient już się ponownie połączył, błąd jest również zgłaszany z Connection = nil, dzięki czemu nowe połączenie pozostaje otwarte.

Przykład


oClient.WriteData('My First sgcWebSockets Message!.');

Przeciążenie 2

Składnia

procedure WriteData(const aStream: TStream; const aSize: Integer = 0; const aStreaming: TwsStreaming = stmNone);

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, 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ść.

Uwagi

WriteData odczytuje dostarczony strumień od bieżącej pozycji i przesyła jego zawartość jako binarną ramkę WebSocket. Wywołanie domyślnie odbywa się w wątku wywołującym; gdy właściwość QueueOptions.Binary jest ustawiona na wartość inną niż qmNone, wiadomość jest kolejkowana i faktycznie wysyłana z wątku połączenia. Wyjątki gniazda są przechwytywane i przekazywane do OnError. Gdy klient nie jest połączony lub jego handshake nie został jeszcze zakończony, nic nie jest wysyłane, a błąd jest zgłaszany przez OnError z Connection = nil, tak jak opisano dla przeciążenia tekstowego. Strumień należy zwolnić dopiero po powrocie wywołania (lub, w przypadku kolejkowania, po zakończeniu wysyłania).

Przykład


oStream := TMemoryStream.Create;
try
  oStream.LoadFromFile('payload.bin');
  oClient.WriteData(oStream);
finally
  oStream.Free;
end;

Powrót do metod