TsgcTCPClient › Zdarzenia › OnError
Wywoływane za każdym razem, gdy na połączeniu TCP zostanie zgłoszony błąd niekrytyczny.
property OnError: TsgcWSErrorEvent;
// TsgcWSErrorEvent = procedure(Connection: TsgcWSConnection; const Error: string) of object
—
OnError zgłasza problemy na poziomie transportu wykryte podczas wysyłania lub odbierania danych przez gniazdo TCP, takie jak nieudany handshake TLS, przekroczenie limitu czasu heartbeat lub błąd podczas przetwarzania odebranego ładunku. Parametr Error zawiera tekstowy opis błędu, a parametr Connection identyfikuje sesję, której dotyczy problem. W przypadku nieobsłużonych wyjątków (błędy gniazda, naruszenia dostępu itp.) należy użyć zdarzenia 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 i WriteAndWaitData zgłaszają w ten sposób wiadomość, której nie udało się wysłać, ponieważ klient nie jest połą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 w kodzie, aby wyłączyć zgłaszanie wiadomości, których nie udało się wysłać.
procedure OnError(Connection: TsgcWSConnection; const Error: string);
begin
WriteLn('#error: ' + Error);
end;