diff options
Diffstat (limited to 'src/zenserver/sessions/httpsessions.h')
| -rw-r--r-- | src/zenserver/sessions/httpsessions.h | 33 |
1 files changed, 31 insertions, 2 deletions
diff --git a/src/zenserver/sessions/httpsessions.h b/src/zenserver/sessions/httpsessions.h index e07f3b59b..a5783a46b 100644 --- a/src/zenserver/sessions/httpsessions.h +++ b/src/zenserver/sessions/httpsessions.h @@ -5,16 +5,25 @@ #include <zenhttp/httpserver.h> #include <zenhttp/httpstats.h> #include <zenhttp/httpstatus.h> +#include <zenhttp/websocket.h> #include <zentelemetry/stats.h> +ZEN_THIRD_PARTY_INCLUDES_START +#include <asio/io_context.hpp> +#include <asio/steady_timer.hpp> +ZEN_THIRD_PARTY_INCLUDES_END + namespace zen { class SessionsService; -class HttpSessionsService final : public HttpService, public IHttpStatusProvider, public IHttpStatsProvider +class HttpSessionsService final : public HttpService, public IHttpStatusProvider, public IHttpStatsProvider, public IWebSocketHandler { public: - HttpSessionsService(HttpStatusService& StatusService, HttpStatsService& StatsService, SessionsService& Sessions); + HttpSessionsService(HttpStatusService& StatusService, + HttpStatsService& StatsService, + SessionsService& Sessions, + asio::io_context& IoContext); virtual ~HttpSessionsService(); virtual const char* BaseUri() const override; @@ -24,6 +33,13 @@ public: virtual void HandleStatsRequest(HttpServerRequest& Request) override; virtual void HandleStatusRequest(HttpServerRequest& Request) override; + void SetSelfSessionId(const Oid& Id) { m_SelfSessionId = Id; } + + // IWebSocketHandler + void OnWebSocketOpen(Ref<WebSocketConnection> Connection) override; + void OnWebSocketMessage(WebSocketConnection& Conn, const WebSocketMessage& Msg) override; + void OnWebSocketClose(WebSocketConnection& Conn, uint16_t Code, std::string_view Reason) override; + private: struct SessionsStats { @@ -43,6 +59,7 @@ private: void ListSessionsRequest(HttpRouterRequest& Req); void SessionRequest(HttpRouterRequest& Req); + void SessionLogRequest(HttpRouterRequest& Req); HttpStatusService& m_StatusService; HttpStatsService& m_StatsService; @@ -50,6 +67,18 @@ private: SessionsService& m_Sessions; SessionsStats m_SessionsStats; metrics::OperationTiming m_HttpRequests; + + // WebSocket push + RwLock m_WsConnectionsLock; + std::vector<Ref<WebSocketConnection>> m_WsConnections; + asio::steady_timer m_PushTimer; + + void BroadcastSessions(); + void EnqueuePushTimer(); + + Oid m_SelfSessionId = Oid::Zero; + + CbObject BuildSessionListResponse(); }; } // namespace zen |