// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include #include #include #include #include namespace zen { class HttpProxyHandler; class HttpStatsService; class Hub; /** ZenServer Hub Service * * Manages a set of storage servers on the behalf of external clients. For * use in UEFN content worker style scenarios. * */ class HttpHubService : public HttpService, public IHttpStatusProvider, public IHttpStatsProvider, public IWebSocketHandler { public: HttpHubService(Hub& Hub, HttpProxyHandler& Proxy, HttpStatsService& StatsService, HttpStatusService& StatusService); ~HttpHubService(); HttpHubService(const HttpHubService&) = delete; HttpHubService& operator=(const HttpHubService&) = delete; virtual const char* BaseUri() const override; virtual void HandleRequest(HttpServerRequest& Request) override; virtual void HandleStatusRequest(HttpServerRequest& Request) override; virtual void HandleStatsRequest(HttpServerRequest& Request) override; virtual CbObject CollectStats() override; virtual uint64_t GetActivityCounter() override; // IWebSocketHandler void OnWebSocketOpen(Ref Connection, std::string_view RelativeUri) override; void OnWebSocketMessage(WebSocketConnection& Conn, const WebSocketMessage& Msg) override; void OnWebSocketClose(WebSocketConnection& Conn, uint16_t Code, std::string_view Reason) override; void SetNotificationEndpoint(std::string_view UpstreamNotificationEndpoint, std::string_view InstanceId); private: Hub& m_Hub; HttpRequestRouter m_Router; metrics::OperationTiming m_HttpRequests; HttpStatsService& m_StatsService; HttpStatusService& m_StatusService; void HandleModuleGet(HttpServerRequest& Request, std::string_view ModuleId); void HandleModuleDelete(HttpServerRequest& Request, std::string_view ModuleId); HttpProxyHandler& m_Proxy; }; } // namespace zen