#pragma once // qt #include #include #include // #include // orpheus #include "iprotocol.h" class ICamera; class QHttpServer; class HttpServer : public IProtocol { private: struct Stats { uint64_t GET_pixels_us{0}; } m_stats{0}; public: static constexpr auto DefaultAddress = QHostAddress::Any; static constexpr uint16_t DefaultPort{8080}; public: explicit HttpServer(std::shared_ptr camera, const QHostAddress &address = DefaultAddress, const uint16_t port = DefaultPort); ~HttpServer() override = default; // IProtocol public: bool start() override; void stop() override; // TODO: methods starting with GET_/POST_ will be routed automatically public: QHttpServerResponse GET_image(); /*! * \brief GET_image_async * \warning may crash * \return */ QFuture GET_image_async(); QHttpServerResponse GET_pixels(); QHttpServerResponse POST_params(const QHttpServerRequest &request); QHttpServerResponse GET_params(); private: QHostAddress m_address{DefaultAddress}; uint16_t m_port{DefaultPort}; std::shared_ptr m_server; };