diff options
Diffstat (limited to 'zenhttp/include')
| -rw-r--r-- | zenhttp/include/zenhttp/websocket.h | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/zenhttp/include/zenhttp/websocket.h b/zenhttp/include/zenhttp/websocket.h index 336d0bde5..eb4920f17 100644 --- a/zenhttp/include/zenhttp/websocket.h +++ b/zenhttp/include/zenhttp/websocket.h @@ -2,8 +2,13 @@ #include <zencore/memory.h> +#include <functional> #include <memory> +namespace asio { +class io_context; +} + namespace zen { struct WebSocketServerOptions @@ -23,6 +28,49 @@ public: static std::unique_ptr<WebSocketServer> Create(); }; +enum class WebSocketState : uint32_t +{ + kNone, + kConnecting, + kConnected, + kDisconnected, + kFailedToConnect +}; + +enum class WebSocketEvent : uint32_t +{ + kInvalid, + kConnected, + kDisconnected, + kError +}; + +struct WebSocketConnectInfo +{ + std::string Host; + int16_t Port{8848}; + std::string Endpoint; + std::vector<std::string> Protocols; + uint16_t Version{13}; +}; + +class WebSocketClient +{ +public: + using EventCallback = std::function<void()>; + + virtual ~WebSocketClient() = default; + + virtual bool Connect(const WebSocketConnectInfo& Info) = 0; + virtual void Disconnect() = 0; + virtual bool IsConnected() const = 0; + virtual WebSocketState State() const = 0; + + virtual void On(WebSocketEvent Evt, EventCallback&& Cb) = 0; + + static std::unique_ptr<WebSocketClient> Create(asio::io_context& IoCtx); +}; + struct WebSocketMessageHeader { static constexpr uint32_t ExpectedMagic = 0x7a776d68; // zwmh |