X-Git-Url: https://git.sesse.net/?p=cubemap;a=blobdiff_plain;f=server.h;h=99009600a46f0401a325ced52e04f542c57b602f;hp=d0e3d6a75a705b0ed9a2a16624155b0227800828;hb=6d062eab70fd6528219545846e6c19c1cad35a3d;hpb=1d995a9b2f2d56fb66192b8404c9f5591af9ff75 diff --git a/server.h b/server.h index d0e3d6a..9900960 100644 --- a/server.h +++ b/server.h @@ -13,6 +13,8 @@ #define MAX_CLIENT_REQUEST 16384 class ClientProto; +class CubemapStateProto; +class StreamProto; struct Client { Client() {} @@ -49,15 +51,27 @@ struct Client { }; struct Stream { + Stream(const std::string &stream_id); + ~Stream(); + + // Serialization/deserialization. + Stream(const StreamProto &serialized); + StreamProto serialize() const; + + std::string stream_id; + // The HTTP response header, plus the video stream header (if any). std::string header; // The stream data itself, stored in a circular buffer. - char data[BACKLOG_SIZE]; + char *data; // How many bytes contains. Can very well be larger than BACKLOG_SIZE, // since the buffer wraps. size_t data_size; + +private: + Stream(const Stream& other); }; class Server { @@ -70,6 +84,8 @@ public: // Stop the thread. void stop(); + CubemapStateProto serialize() const; + void add_client(int sock); void add_stream(const std::string &stream_id); void set_header(const std::string &stream_id, const std::string &header); @@ -85,7 +101,7 @@ private: bool should_stop; // Map from stream ID to stream. - std::map streams; + std::map streams; // Map from file descriptor to client. std::map clients; @@ -121,6 +137,9 @@ private: // We have more data, so mark all clients that are sleeping as ready to go. void wake_up_all_clients(); + + // TODO: This function should probably die. + Stream *find_stream(const std::string &stream_id); }; #endif // !defined(_SERVER_H)