TsgcWebSocketClient › Métodos › WriteAndWaitData

WriteAndWaitData Método

Envía un mensaje de texto y bloquea al llamador hasta que el servidor responde con un mensaje de texto o expira el tiempo de espera.

Sobrecargas

Sobrecarga 1

Sintaxis

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

Parámetros

NombreTipoDescripción
aTextconst StringLa carga útil de texto a enviar al servidor como frame de texto WebSocket.
aTimeoutconst IntegerTiempo máximo en milisegundos para esperar la respuesta del servidor. El valor predeterminado es 10000 (10 segundos).

Valor de Retorno

El mensaje de texto recibido del servidor, o una cadena vacía cuando el tiempo de espera expiró, no había ninguna conexión disponible o se produjo un error. (string)

Observaciones

WriteAndWaitData es un método auxiliar de conveniencia para intercambios de tipo solicitud/respuesta sobre un WebSocket. Envía el frame de texto y luego bloquea el hilo llamante en un evento interno hasta que llega el siguiente mensaje de texto del servidor o se agota el tiempo de espera. Dado que bloquea el hilo, no debe llamarse desde el hilo principal de la interfaz de usuario a menos que se utilice un tiempo de espera corto. Se devuelve una cadena vacía cuando el servidor no responde a tiempo; las excepciones a nivel de socket se capturan y se reenvían a OnError. Utilice la sobrecarga de stream cuando necesite enviar y recibir cargas útiles binarias.

Cuando el cliente no está conectado, o su handshake de WebSocket aún no se ha completado, WriteAndWaitData no envía nada y devuelve una cadena vacía de inmediato en lugar de esperar al tiempo de espera. El fallo se informa a través de OnError con Connection = nil y el error Data not sent, the client is not connected or its handshake has not completed. (resourcestring S_ERROR_CLIENT_NOT_CONNECTED). El evento se activa en el hilo que realiza la llamada antes de que el método retorne, y LastError contiene el mismo texto. No se genera ninguna excepción hacia el llamador y el cliente no se desconecta. Establezca Options.RaiseDisconnectExceptions en False para omitir este aviso. Cuando una escritura falla porque su conexión se perdió y el cliente ya se ha reconectado, el fallo también se informa con Connection = nil, de modo que la nueva conexión permanece abierta.

Ejemplo


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

Sobrecarga 2

Sintaxis

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

Parámetros

NombreTipoDescripción
aStreamconst TStreamFlujo fuente cuyo contenido se enviará como un frame binario WebSocket. El llamante conserva la propiedad del flujo.
aSizeconst IntegerTamaño de fragmento opcional en bytes; cuando es mayor que cero, el stream saliente se divide en múltiples fragmentos de ese tamaño. Use 0 (el valor predeterminado) para enviar el stream completo como un único frame.
aStreamingconst TwsStreamingModo de transmisión para la transmisión fragmentada (stmNone, stmStart, stmContinue, stmFinish). El valor predeterminado es stmNone, que envía un mensaje completo independiente.
aTimeoutconst IntegerTiempo máximo en milisegundos para esperar la respuesta del servidor. El valor predeterminado es 10000 (10 segundos).

Valor de Retorno

Un flujo recién asignado que contiene el mensaje binario recibido del servidor, o nil si el tiempo de espera expiró, no había ninguna conexión disponible o se produjo un error. El llamador es responsable de liberar el flujo devuelto. (TStream)

Observaciones

Esta sobrecarga es el equivalente binario del texto la otra sobrecarga. Escribe el flujo proporcionado como un frame binario y luego bloquea el subproceso llamante en un evento interno hasta que llega el siguiente mensaje binario del servidor o se agota el tiempo de espera. Dado que bloquea, evite llamarlo desde el subproceso principal de la interfaz de usuario con un tiempo de espera largo. El valor de retorno es nil cuando el servidor no responde a tiempo; las excepciones se capturan y se reenvían a OnError. Cuando el cliente no está conectado, o su handshake aún no se ha completado, el método devuelve nil de inmediato sin esperar al tiempo de espera e informa del fallo a través de OnError con Connection = nil, tal y como se describe para la sobrecarga de texto. Libere tanto el flujo de origen (tras la llamada) como el flujo devuelto cuando haya terminado con ellos.

Ejemplo


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;

Volver a Métodos