TsgcWebSocketClient › Zdarzenia › OnError

OnError Zdarzenie

Wywoływane za każdym razem, gdy w połączeniu wystąpi błąd protokołu WebSocket.

Składnia

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

Wartość domyślna

—

Uwagi

OnError zgłasza problemy na poziomie protokołu wykryte przez warstwę WebSocket, takie jak nieprawidłowy typ wiadomości, zniekształcona ramka lub nieprawidłowy ładunek UTF-8 gdy Options.ValidateUTF8 jest włączone. Parametr Error zawiera tekstowy opis błędu; parametr Connection identyfikuje dotkniętą sesję. W przypadku nieobsłużonych wyjątków (błędy gniazda, naruszenia dostępu itp.) należy użyć OnException. Gdy Connection jest ustawione, komponent zamyka to połączenie po zgłoszeniu OnError, niezależnie od opcji: procedura obsługi zazwyczaj już wtedy zwróciła sterowanie, ale przy NotifyEvents ustawionym na neAsynchronous błąd zgłoszony w wątku pomocniczym jest kolejkowany do wątku głównego, a jego procedura obsługi może zostać uruchomiona już po zamknięciu połączenia. Gdy Connection ma wartość nil, nic nie jest zamykane.

OnError może zostać wywołane z Connection = nil, dlatego procedura obsługi musi sprawdzić Connection przed jego użyciem. WriteData, WriteAndWaitData i Ping zgłaszają w ten sposób wiadomość, której nie udało się wysłać, ponieważ klient nie jest połączony, a WriteData i WriteAndWaitData również wtedy, gdy handshake WebSocket nie został jeszcze zakończony. Parametr Error ma wówczas wartość Data not sent, the client is not connected or its handshake has not completed. (resourcestring S_ERROR_CLIENT_NOT_CONNECTED), a zdarzenie jest wywoływane w wątku, który wywołał metodę, zanim metoda zwróci sterowanie. Zapis, który kończy się niepowodzeniem po ponownym połączeniu klienta, jest również zgłaszany z Connection = nil, dzięki czemu nowe połączenie nie jest zamykane. Ustaw Options.RaiseDisconnectExceptions na False, aby wyłączyć zgłaszanie wiadomości, których nie udało się wysłać.

Przykład


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;

Powrót do Zdarzeń