TsgcWebSocketClientMethods › WriteAndWaitData

WriteAndWaitData Method

Envia uma mensagem de texto e bloqueia o chamador até que o servidor responda com uma mensagem de texto ou o timeout expire.

Overloads

Overload 1

Sintaxe

function WriteAndWaitData(const aText: String; const aTimeout: Integer = 10000): string;

Parâmetros

NameTypeDescrição
aTextconst StringO payload de texto a ser enviado ao servidor como um frame de texto WebSocket.
aTimeoutconst IntegerTempo máximo em milissegundos para aguardar a resposta do servidor. O padrão é 10000 (10 segundos).

Valor de retorno

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)

Observações

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.

Exemplo


vReply := oClient.WriteAndWaitData('ping', 5000);
if vReply <> '' then
  ShowMessage(vReply);

Sobrecarga 2

Sintaxe

function WriteAndWaitData(const aStream: TStream; const aSize: Integer = 0; const aStreaming: TwsStreaming = stmNone; const aTimeout: Integer = 10000) : TStream;

Parâmetros

NameTypeDescrição
aStreamconst TStreamStream de origem cujo conteúdo será enviado como um frame binário WebSocket. O chamador permanece o proprietário do stream.
aSizeconst IntegerTamanho 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.
aStreamingconst TwsStreamingModo de streaming para transmissão fragmentada (stmNone, stmStart, stmContinue, stmFinish). Padrão stmNone, que envia uma mensagem completa e independente.
aTimeoutconst IntegerTempo máximo em milissegundos para aguardar a resposta do servidor. O padrão é 10000 (10 segundos).

Valor de retorno

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)

Observações

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.

Exemplo


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;

Voltar para Métodos