/* * Copyright (c) 2021, Dex♪ * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include #include #include #include #include #include namespace Protocol { class WebSocketClient; class WebSocket : public RefCounted { public: struct CertificateAndKey { String certificate; String key; }; struct Message { ByteBuffer data; bool is_text { false }; }; enum class Error { CouldNotEstablishConnection, ConnectionUpgradeFailed, ServerClosedSocket, }; enum class ReadyState { Connecting = 0, Open = 1, Closing = 2, Closed = 3, }; static NonnullRefPtr create_from_id(Badge, WebSocketClient& client, i32 connection_id) { return adopt_ref(*new WebSocket(client, connection_id)); } int id() const { return m_connection_id; } ReadyState ready_state(); void send(ByteBuffer binary_or_text_message, bool is_text); void send(StringView text_message); void close(u16 code = 1005, String reason = {}); Function on_open; Function on_message; Function on_error; Function on_close; Function on_certificate_requested; void did_open(Badge); void did_receive(Badge, ByteBuffer, bool); void did_error(Badge, i32); void did_close(Badge, u16, String, bool); void did_request_certificates(Badge); private: explicit WebSocket(WebSocketClient&, i32 connection_id); WeakPtr m_client; int m_connection_id { -1 }; }; }