TsgcWebSocketClient › Eventos › OnError

OnError Evento

Dispara toda vez que ocorre um erro de protocolo WebSocket na conexão.

Sintaxe

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

Valor Padrão

—

Observações

OnError reporta problemas em nível de protocolo detectados pela camada WebSocket, como um tipo de mensagem inválido, um frame malformado ou um payload UTF-8 inválido quando Options.ValidateUTF8 está habilitado. O parâmetro Error contém uma descrição textual da falha; o parâmetro Connection identifica a sessão afetada. Para exceções não tratadas (erros de socket, access violations...) use OnException em vez disso. Quando Connection está atribuído, o componente fecha essa conexão assim que OnError é disparado, quaisquer que sejam as opções: o handler normalmente já retornou nesse momento, mas com NotifyEvents definido como neAsynchronous, um erro gerado em uma thread secundária é enfileirado para a thread principal, e seu handler pode ser executado depois que a conexão já foi fechada. Quando Connection é nil, nada é fechado.

OnError pode disparar com Connection = nil, portanto um handler deve verificar Connection antes de utilizá-lo. WriteData, WriteAndWaitData e Ping relatam desta forma uma mensagem que não pôde ser enviada porque o cliente não está conectado, e WriteData e WriteAndWaitData também quando o handshake WebSocket ainda não foi concluído. O parâmetro Error é então Data not sent, the client is not connected or its handshake has not completed. (resourcestring S_ERROR_CLIENT_NOT_CONNECTED), e o evento é disparado na thread que chamou o método, antes que o método retorne. Uma escrita que falha depois que o cliente reconectou também é relatada com Connection = nil, para que a nova conexão não seja fechada. Defina Options.RaiseDisconnectExceptions como False para desabilitar o relato de mensagens que não puderam ser enviadas.

Exemplo


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;

Voltar para Eventos