TsgcWebSocketClient › Methoden › WriteData
Verzendt een tekstbericht naar de WebSocket-server, optioneel opgesplitst in fragmenten van een opgegeven grootte.
procedure WriteData(const aText: String; const aSize: Integer = 0; const aStreaming: TwsStreaming = stmNone);
| Naam | Type | Beschrijving |
|---|---|---|
aText | const String | De tekstpayload die als WebSocket-tekstframe naar de server wordt verzonden. |
aSize | const Integer | Optionele fragmentgrootte in bytes; wanneer groter dan nul wordt het bericht opgesplitst in meerdere fragmenten van deze grootte. Gebruik 0 (de standaard) om het hele bericht als één enkel frame te verzenden. |
aStreaming | const TwsStreaming | Streamingmodus voor gefragmenteerde overdracht (stmNone, stmStart, stmContinue, stmFinish). Standaard stmNone, waarmee een volledig zelfstandig bericht wordt verzonden. |
WriteData verzendt de tekenreeks als een WebSocket-tekstframe op de actieve verbinding. Standaard wordt de aanroep uitgevoerd op de aanroepende thread en keert terug zodra de bytes aan de socket zijn overgedragen. Wanneer QueueOptions.Text is ingesteld op een andere waarde dan qmNone, wordt het bericht in de wachtrij geplaatst en feitelijk verzonden vanuit de eigen thread van de verbinding, wat vergrendelingen voorkomt wanneer meerdere threads gelijktijdig schrijven. Elke socketuitzondering wordt doorgestuurd naar OnError. Gebruik de stream-overload voor het verzenden van grote payloads of binaire gegevens.
Wanneer de client niet is verbonden, of de WebSocket-handshake nog niet is voltooid, wordt er niets verzonden en wordt de fout gemeld via OnError met Connection = nil en de foutmelding Data not sent, the client is not connected or its handshake has not completed. (resourcestring S_ERROR_CLIENT_NOT_CONNECTED). De gebeurtenis wordt geactiveerd op de aanroepende thread voordat WriteData terugkeert, en LastError bevat dezelfde tekst. Er wordt geen uitzondering naar de aanroeper gegenereerd en de verbinding wordt niet verbroken. Stel Options.RaiseDisconnectExceptions in op False om deze melding over te slaan en het bericht stilzwijgend te laten vallen, zoals in eerdere versies. Wanneer een schrijfbewerking mislukt omdat de verbinding verloren is gegaan en de client al opnieuw is verbonden, wordt de fout ook gemeld met Connection = nil, zodat de nieuwe verbinding open blijft.
oClient.WriteData('My First sgcWebSockets Message!.');
procedure WriteData(const aStream: TStream; const aSize: Integer = 0; const aStreaming: TwsStreaming = stmNone);
| Naam | Type | Beschrijving |
|---|---|---|
aStream | const TStream | Bronstream waarvan de inhoud zal worden verzonden als een WebSocket-binair frame. De aanroeper blijft de eigenaar van de stream. |
aSize | const Integer | Optionele fragmentgrootte in bytes; wanneer groter dan nul, wordt de stream opgesplitst in meerdere fragmenten van deze grootte. Gebruik 0 (de standaard) om de volledige stream als één frame te verzenden. |
aStreaming | const TwsStreaming | Streamingmodus voor gefragmenteerde overdracht (stmNone, stmStart, stmContinue, stmFinish). Standaard stmNone, waarmee een volledig zelfstandig bericht wordt verzonden. |
WriteData leest de opgegeven stream vanaf zijn huidige positie en verzendt de inhoud als een WebSocket-binair frame. De aanroep wordt standaard uitgevoerd op de aanroepende thread; wanneer QueueOptions.Binary is ingesteld op een andere waarde dan qmNone, wordt het bericht in de wachtrij geplaatst en daadwerkelijk verzonden vanuit de verbindingsthread. Socket-uitzonderingen worden onderschept en doorgestuurd naar OnError. Wanneer de client niet is verbonden, of de handshake nog niet is voltooid, wordt er niets verzonden en wordt de fout gemeld via OnError met Connection = nil, zoals beschreven voor de tekst-overload. Geef de stream pas vrij nadat de aanroep terugkeert (of, bij het in wachtrij plaatsen, nadat de verzending is voltooid).
oStream := TMemoryStream.Create;
try
oStream.LoadFromFile('payload.bin');
oClient.WriteData(oStream);
finally
oStream.Free;
end;