TsgcWebSocketClient › Metody › WriteData
Wysyła wiadomość tekstową do serwera WebSocket, opcjonalnie dzieląc ją na fragmenty o podanym rozmiarze.
procedure WriteData(const aText: String; const aSize: Integer = 0; const aStreaming: TwsStreaming = stmNone);
| Nazwa | Typ | Opis |
|---|---|---|
aText | const String | Ładunek tekstowy do wysłania do serwera jako ramka tekstowa WebSocket. |
aSize | const Integer | Opcjonalny 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ę. |
aStreaming | const TwsStreaming | Tryb strumieniowania dla pofragmentowanej transmisji (stmNone, stmStart, stmContinue, stmFinish). Domyślnie stmNone, co wysyła kompletną, samodzielną wiadomość. |
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.
oClient.WriteData('My First sgcWebSockets Message!.');
procedure WriteData(const aStream: TStream; const aSize: Integer = 0; const aStreaming: TwsStreaming = stmNone);
| 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, 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ść. |
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).
oStream := TMemoryStream.Create;
try
oStream.LoadFromFile('payload.bin');
oClient.WriteData(oStream);
finally
oStream.Free;
end;