TsgcWebSocketClient › Metodi › WriteData
Invia un messaggio di testo al server WebSocket, suddividendolo facoltativamente in frammenti di una determinata dimensione.
procedure WriteData(const aText: String; const aSize: Integer = 0; const aStreaming: TwsStreaming = stmNone);
| Nome | Tipo | Descrizione |
|---|---|---|
aText | const String | Il payload testuale da inviare al server come frame di testo WebSocket. |
aSize | const Integer | Dimensione opzionale del frammento in byte; quando maggiore di zero, il messaggio viene suddiviso in più frammenti di questa dimensione. Utilizzare 0 (il valore predefinito) per inviare l'intero messaggio come un singolo frame. |
aStreaming | const TwsStreaming | Modalità di streaming per la trasmissione frammentata (stmNone, stmStart, stmContinue, stmFinish). Il valore predefinito è stmNone, che invia un messaggio completo autonomo. |
WriteData trasmette la stringa come frame di testo WebSocket sulla connessione attiva. Per impostazione predefinita, la chiamata viene eseguita sul thread chiamante e restituisce il controllo non appena i byte vengono consegnati al socket. Quando QueueOptions.Text è impostato su un valore diverso da qmNone, il messaggio viene accodato e inviato effettivamente dal thread della connessione, evitando blocchi quando più thread scrivono contemporaneamente. Qualsiasi eccezione socket viene inoltrata a OnError. Utilizzare l'overload con stream per l'invio di payload di grandi dimensioni o dati binari.
Quando il client non è connesso, o il suo handshake WebSocket non è ancora terminato, non viene inviato nulla e l'errore viene segnalato tramite OnError con Connection = nil e l'errore Data not sent, the client is not connected or its handshake has not completed. (resourcestring S_ERROR_CLIENT_NOT_CONNECTED). L'evento viene generato sul thread chiamante prima che WriteData restituisca il controllo, e LastError contiene lo stesso testo. Nessuna eccezione viene sollevata verso il chiamante e il client non viene disconnesso. Impostare Options.RaiseDisconnectExceptions su False per ignorare questa segnalazione e scartare il messaggio silenziosamente, come facevano le versioni precedenti. Quando un invio fallisce perché la sua connessione è andata persa e il client si è già riconnesso, l'errore viene segnalato comunque con Connection = nil, in modo che la nuova connessione resti aperta.
oClient.WriteData('My First sgcWebSockets Message!.');
procedure WriteData(const aStream: TStream; const aSize: Integer = 0; const aStreaming: TwsStreaming = stmNone);
| Nome | Tipo | Descrizione |
|---|---|---|
aStream | const TStream | Stream sorgente il cui contenuto verrà inviato come frame binario WebSocket. Il chiamante rimane il proprietario dello stream. |
aSize | const Integer | Dimensione opzionale del frammento in byte; quando è maggiore di zero, lo stream viene suddiviso in più frammenti di questa dimensione. Utilizzare 0 (il valore predefinito) per inviare l'intero stream come un singolo frame. |
aStreaming | const TwsStreaming | Modalità di streaming per la trasmissione frammentata (stmNone, stmStart, stmContinue, stmFinish). Il valore predefinito è stmNone, che invia un messaggio completo autonomo. |
WriteData legge lo stream fornito dalla sua posizione corrente e trasmette il contenuto come frame binario WebSocket. La chiamata viene eseguita sul thread chiamante per impostazione predefinita; quando QueueOptions.Binary è impostato su un valore diverso da qmNone, il messaggio viene accodato e inviato effettivamente dal thread di connessione. Le eccezioni socket vengono catturate e inoltrate a OnError. Quando il client non è connesso, o il suo handshake non è ancora terminato, non viene inviato nulla e l'errore viene segnalato tramite OnError con Connection = nil, come descritto per l'overload con testo. Liberare lo stream solo dopo che la chiamata è tornata (oppure, quando si usa l'accodamento, dopo che l'invio è completato).
oStream := TMemoryStream.Create;
try
oStream.LoadFromFile('payload.bin');
oClient.WriteData(oStream);
finally
oStream.Free;
end;