TsgcWebSocketClient › イベント › OnError
接続で WebSocket プロトコルエラーが発生するたびに発生します。
property OnError: TsgcWSErrorEvent;
// TsgcWSErrorEvent = procedure(Connection: TsgcWSConnection; const Error: string) of object
—
OnError は WebSocket 層で検出されたプロトコルレベルの問題(無効なメッセージタイプ、不正なフレーム、または Options.ValidateUTF8 が有効な場合の無効な UTF-8 ペイロード)を報告します。Error パラメータには障害のテキスト説明が含まれ、Connection パラメータは影響を受けるセッションを識別します。未処理の例外(ソケットエラー、アクセス違反など)には代わりに OnException を使用してください。Connection が割り当てられている場合、オプションの設定にかかわらず、OnError が発生した後にコンポーネントはその接続を閉じます。通常はその時点でハンドラーはすでに戻っていますが、NotifyEvents が neAsynchronous に設定されている場合、セカンダリスレッドで発生したエラーはメインスレッドにキューイングされ、そのハンドラーは接続が閉じられた後に実行されることがあります。Connection が nil の場合、何も閉じられません。
OnError は Connection = nil で発生することがあるため、ハンドラーは使用前に必ず Connection を確認する必要があります。WriteData、WriteAndWaitData、Ping は、クライアントが接続されていないために送信できなかったメッセージをこの方法で報告し、WriteData と WriteAndWaitData は WebSocket ハンドシェイクがまだ完了していない場合にも同様に報告します。この場合の Error パラメータは Data not sent, the client is not connected or its handshake has not completed.(resourcestring S_ERROR_CLIENT_NOT_CONNECTED)となり、イベントはメソッドを呼び出したスレッドで、メソッドが返る前に発生します。クライアントが再接続した後に書き込みが失敗した場合も Connection = nil で報告されるため、新しい接続は閉じられません。送信できなかったメッセージの報告を無効にするには、Options.RaiseDisconnectExceptions を False に設定してください。
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;