Manchmal treten Fehler in der Kommunikation auf: Der Server kann eine Verbindung trennen, weil sie nicht autorisiert ist oder eine Nachricht nicht das korrekte Format hat. Es gibt 2 Ereignisse, in denen Fehler erfasst werden.
Dieses Ereignis wird jedes Mal ausgelöst, wenn es einen Fehler im WebSocket-Protokoll gibt, wie einen ungültigen Nachrichtentyp, eine ungültige utf8-Zeichenfolge...
OnError wird auch mit Connection = nil ausgelöst, wenn WriteData, WriteAndWaitData oder Ping eine Nachricht nicht senden können, weil der Client nicht verbunden ist, oder, bei WriteData und WriteAndWaitData, weil der WebSocket-Handshake noch nicht abgeschlossen ist. Der Parameter Error lautet dann Data not sent, the client is not connected or its handshake has not completed. Es wird keine Ausnahme an den Aufrufer weitergegeben, und der Client wird nicht getrennt, daher sollten Sie in diesem Ereignis Connection immer auf nil prüfen, bevor Sie sie verwenden.
procedure OnError(Connection: TsgcWSConnection; const Error: string);
begin
WriteLn('#error: ' + Error);
end;
Dieses Ereignis wird jedes Mal ausgelöst, wenn eine Ausnahme auftritt, etwa beim Schreiben in einen Socket, der nicht aktiv ist, oder beim Zugriff auf ein Objekt, das nicht existiert.
procedure OnException(Connection: TsgcWSConnection; E: Exception);
begin
WriteLn('#exception: ' + E.Message);
end;
Standardmäßig wird, wenn eine Verbindung vom Server geschlossen wird, eine Ausnahme ausgelöst. Wenn Sie nicht möchten, dass diese Ausnahmen ausgelöst werden, deaktivieren Sie Options.RaiseDisconnectExceptions.
Options.RaiseDisconnectExceptions steuert auch die OnError-Meldung von Nachrichten, die nicht gesendet werden konnten, weil der Client nicht verbunden ist. Setzen Sie es auf False, um diese Nachrichten stillschweigend zu verwerfen, wie es frühere Versionen taten.