TsgcWebSocketClient | Wyjątki klienta

Niekiedy w komunikacji zdarzają się błędy: serwer może rozłączyć połączenie, ponieważ nie jest ono autoryzowane lub wiadomość ma nieprawidłowy format. Istnieją 2 zdarzenia przechwytujące błędy.

OnError

To zdarzenie jest wywoływane za każdym razem, gdy wystąpi błąd protokołu WebSocket, taki jak nieprawidłowy typ wiadomości, nieprawidłowy ciąg utf8 itp.

OnError jest wywoływane również z Connection = nil, gdy WriteData, WriteAndWaitData lub Ping nie mogą wysłać wiadomości, ponieważ klient nie jest połączony, lub, w przypadku WriteData i WriteAndWaitData, ponieważ 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. Do wywołującego nie jest zgłaszany żaden wyjątek i klient nie zostaje rozłączony, dlatego w tym zdarzeniu zawsze należy sprawdzić, czy Connection ma wartość nil, zanim zostanie użyte.


procedure OnError(Connection: TsgcWSConnection; const Error: string);
begin
  WriteLn('#error: ' + Error);
end;

 

OnException

To zdarzenie jest wywoływane za każdym razem, gdy wystąpi wyjątek, na przykład podczas zapisu do nieaktywnego gniazda lub uzyskiwania dostępu do nieistniejącego obiektu.

 


procedure OnException(Connection: TsgcWSConnection; E: Exception);
begin
  WriteLn('#exception: ' + E.Message);
end;

Domyślnie, gdy połączenie jest zamykane przez serwer, zostaje zgłoszony wyjątek. Jeśli nie chcesz, aby te wyjątki były zgłaszane, wyłącz Options.RaiseDisconnectExceptions.

Options.RaiseDisconnectExceptions kontroluje również zgłaszanie przez OnError wiadomości, których nie udało się wysłać, ponieważ klient nie jest połączony. Ustaw ją na False, aby po cichu odrzucać te wiadomości, tak jak robiły to wcześniejsze wersje.