Às vezes há erros nas comunicações: o servidor pode desconectar uma conexão porque não está autorizada ou uma mensagem não tem o formato correto. Há 2 eventos onde os erros são capturados.
Este evento é disparado toda vez que há um erro no protocolo WebSocket, como tipo de mensagem inválido, string utf8 inválida...
OnError também é disparado com Connection = nil quando WriteData, WriteAndWaitData ou Ping não conseguem enviar uma mensagem porque o cliente não está conectado, ou, para WriteData e WriteAndWaitData, porque 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. Nenhuma exceção é gerada para o chamador e o cliente não é desconectado, portanto sempre verifique se Connection é nil antes de utilizá-lo neste evento.
procedure OnError(Connection: TsgcWSConnection; const Error: string);
begin
WriteLn('#error: ' + Error);
end;
Este evento é disparado toda vez que há uma exceção, como escrever em um socket que não está ativo ou acessar um objeto que não existe.
procedure OnException(Connection: TsgcWSConnection; E: Exception);
begin
WriteLn('#exception: ' + E.Message);
end;
Por padrão, quando uma conexão é fechada pelo servidor, uma exceção será gerada. Se você não quiser que essas exceções sejam geradas, desabilite Options.RaiseDisconnectExceptions.
Options.RaiseDisconnectExceptions também controla o relato de OnError de mensagens que não puderam ser enviadas porque o cliente não está conectado. Defina como False para descartar essas mensagens silenciosamente, como faziam versões anteriores.