TsgcWebSocketClient › Methods › WriteAndWaitData
Envia uma mensagem de texto e bloqueia o chamador até que o servidor responda com uma mensagem de texto ou o timeout expire.
function WriteAndWaitData(const aText: String; const aTimeout: Integer = 10000): string;
| Name | Type | Descrição |
|---|---|---|
aText | const String | O payload de texto a ser enviado ao servidor como um frame de texto WebSocket. |
aTimeout | const Integer | Tempo máximo em milissegundos para aguardar a resposta do servidor. O padrão é 10000 (10 segundos). |
A mensagem de texto recebida do servidor, ou uma string vazia quando o timeout expirou, nenhuma conexão estava disponível ou ocorreu um erro. (string)
WriteAndWaitData é um auxiliar de conveniência para trocas no estilo requisição/resposta sobre um WebSocket. Ele envia o frame de texto e então bloqueia a thread chamadora em um evento interno até que a próxima mensagem de texto chegue do servidor ou o timeout dispare. Como ele bloqueia, não deve ser chamado a partir da thread principal de UI, a menos que um timeout curto seja utilizado. Uma string vazia é retornada quando o cliente não está conectado ou quando o servidor não responde a tempo; exceções no nível do socket são capturadas e encaminhadas a OnError. Utilize a sobrecarga de stream quando precisar enviar e receber payloads binários.
vReply := oClient.WriteAndWaitData('ping', 5000);
if vReply <> '' then
ShowMessage(vReply);
function WriteAndWaitData(const aStream: TStream; const aSize: Integer = 0; const aStreaming: TwsStreaming = stmNone; const aTimeout: Integer = 10000) : TStream;
| 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 de saída é 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. |
aTimeout | const Integer | Tempo máximo em milissegundos para aguardar a resposta do servidor. O padrão é 10000 (10 segundos). |
Um stream recém-alocado contendo a mensagem binária recebida do servidor, ou nil quando o timeout expirou, nenhuma conexão estava disponível ou ocorreu um erro. O chamador é responsável por liberar o stream retornado. (TStream)
Esta sobrecarga é a contraparte binária da outra sobrecarga de texto. Ela escreve o stream fornecido como um frame binário e então bloqueia a thread chamadora em um evento interno até que a próxima mensagem binária chegue do servidor ou o timeout dispare. Como bloqueia, evite chamá-la a partir da thread principal da UI com um timeout longo. O valor de retorno é nil quando o cliente não está conectado ou o servidor não responde a tempo; exceções são capturadas e encaminhadas para OnError. Libere tanto o stream de origem (após a chamada) quanto o stream retornado quando terminar de utilizá-los.
oRequest := TMemoryStream.Create;
try
oRequest.LoadFromFile('request.bin');
oReply := oClient.WriteAndWaitData(oRequest, 0, stmNone, 5000);
try
if Assigned(oReply) then
oReply.SaveToFile('reply.bin');
finally
oReply.Free;
end;
finally
oRequest.Free;
end;