TsgcWebSocketClient › Métodos › WriteData
Envia uma mensagem de texto ao servidor WebSocket, opcionalmente dividindo-a em fragmentos de um determinado tamanho.
procedure WriteData(const aText: String; const aSize: Integer = 0; const aStreaming: TwsStreaming = stmNone);
| Name | Type | Descrição |
|---|---|---|
aText | const String | O payload de texto a ser enviado ao servidor como um frame de texto WebSocket. |
aSize | const Integer | Tamanho de fragmento opcional em bytes; quando maior que zero, a mensagem é dividida em múltiplos fragmentos desse tamanho. Use 0 (o padrão) para enviar a mensagem inteira como um único frame. |
aStreaming | const TwsStreaming | Modo de streaming para transmissão fragmentada (stmNone, stmStart, stmContinue, stmFinish). Padrão stmNone, que envia uma mensagem completa e independente. |
WriteData transmite a string como um frame de texto WebSocket na conexão ativa. Por padrão, a chamada executa na thread chamadora e retorna assim que os bytes são entregues ao socket. Quando QueueOptions.Text é definido com um valor diferente de qmNone, a mensagem é enfileirada e efetivamente enviada a partir da própria thread da conexão, o que evita locks quando várias threads escrevem simultaneamente. Qualquer exceção de socket é encaminhada para OnError. Use a sobrecarga de stream ao enviar payloads grandes ou dados binários.
Quando o cliente não está conectado, ou seu handshake WebSocket ainda não foi concluído, nada é enviado e a falha é relatada através de OnError com Connection = nil e o erro Data not sent, the client is not connected or its handshake has not completed. (resourcestring S_ERROR_CLIENT_NOT_CONNECTED). O evento é disparado na thread chamadora antes que WriteData retorne, e LastError contém o mesmo texto. Nenhuma exceção é gerada para o chamador e o cliente não é desconectado. Defina Options.RaiseDisconnectExceptions como False para ignorar este relato e descartar a mensagem silenciosamente, como faziam versões anteriores. Quando uma escrita falha porque sua conexão foi perdida e o cliente já reconectou, a falha também é relatada com Connection = nil, para que a nova conexão permaneça aberta.
oClient.WriteData('My First sgcWebSockets Message!.');
procedure WriteData(const aStream: TStream; const aSize: Integer = 0; const aStreaming: TwsStreaming = stmNone);
| Name | Type | Descrição |
|---|---|---|
aStream | const TStream | Stream de origem cujo conteúdo será enviado como um frame binário WebSocket. O chamador permanece o proprietário do stream. |
aSize | const Integer | Tamanho de fragmento opcional em bytes; quando maior que zero, o stream é dividido em múltiplos fragmentos deste tamanho. Use 0 (o padrão) para enviar todo o stream como um único frame. |
aStreaming | const TwsStreaming | Modo de streaming para transmissão fragmentada (stmNone, stmStart, stmContinue, stmFinish). Padrão stmNone, que envia uma mensagem completa e independente. |
WriteData lê o stream fornecido a partir de sua posição atual e transmite o conteúdo como um frame binário WebSocket. A chamada é executada na thread chamadora por padrão; quando QueueOptions.Binary é definido para um valor diferente de qmNone, a mensagem é enfileirada e efetivamente despachada a partir da thread da conexão. As exceções de socket são capturadas e encaminhadas para OnError. Quando o cliente não está conectado, ou seu handshake ainda não foi concluído, nada é enviado e a falha é relatada através de OnError com Connection = nil, como descrito para a sobrecarga de texto. Libere o stream apenas após o retorno da chamada (ou, ao enfileirar, após o envio ser concluído).
oStream := TMemoryStream.Create;
try
oStream.LoadFromFile('payload.bin');
oClient.WriteData(oStream);
finally
oStream.Free;
end;