TsgcWebSocketClient › Eventos › OnError

OnError Evento

Se activa cada vez que se produce un error de protocolo WebSocket en la conexión.

Sintaxis

property OnError: TsgcWSErrorEvent;
// TsgcWSErrorEvent = procedure(Connection: TsgcWSConnection; const Error: string) of object

Valor Predeterminado

—

Observaciones

OnError informa de problemas a nivel de protocolo detectados por la capa WebSocket, como un tipo de mensaje no válido, una trama malformada o una carga útil UTF-8 no válida cuando Options.ValidateUTF8 está habilitado. El parámetro Error contiene una descripción textual del fallo; el parámetro Connection identifica la sesión afectada. Para excepciones no controladas (errores de socket, violaciones de acceso, etc.) use OnException. Cuando Connection está asignado, el componente cierra esa conexión una vez que se ha generado OnError, sean cuales sean las opciones: el manejador normalmente ya ha retornado en ese momento, pero con NotifyEvents establecido en neAsynchronous, un error generado en un hilo secundario se encola hacia el hilo principal y su manejador puede ejecutarse después de que la conexión ya se haya cerrado. Cuando Connection es nil, no se cierra nada.

OnError puede activarse con Connection = nil, por lo que un manejador debe comprobar Connection antes de utilizarlo. WriteData, WriteAndWaitData y Ping informan de este modo un mensaje que no pudo enviarse porque el cliente no está conectado, y WriteData y WriteAndWaitData también cuando el handshake de WebSocket aún no se ha completado. El parámetro Error es entonces Data not sent, the client is not connected or its handshake has not completed. (resourcestring S_ERROR_CLIENT_NOT_CONNECTED), y el evento se activa en el hilo que invocó el método, antes de que el método retorne. Una escritura que falla después de que el cliente se haya reconectado también se informa con Connection = nil, de modo que la nueva conexión no se cierra. Establezca Options.RaiseDisconnectExceptions en False para desactivar el aviso de los mensajes que no se pudieron enviar.

Ejemplo


procedure OnError(Connection: TsgcWSConnection; const Error: string);
begin
  if Connection = nil then
    // a write or ping found no connection, nothing was sent
    WriteLn('#not sent: ' + Error)
  else
    WriteLn('#error: ' + Error);
end;

Volver a Eventos