X-Git-Url: https://git.sesse.net/?p=cubemap;a=blobdiff_plain;f=stream.h;h=97451f0c8afe7fe08dc57b7c44c18e64de4a0615;hp=7e20aef2f02c6147e952c3804c55f705d39f0363;hb=e0b47eba2f5ec1aca1d02adc9fb4ffc7293d5c0f;hpb=7c26826d3c485f4f18a6c427f520dc470e68f94a diff --git a/stream.h b/stream.h index 7e20aef..97451f0 100644 --- a/stream.h +++ b/stream.h @@ -69,21 +69,28 @@ struct Stream { // What pool to fetch marks from, or NULL. MarkPool *mark_pool; + // Queued data, if any. Protected by the owning Server's . + std::string queued_data; + // Put client to sleep, since there is no more data for it; we will on // longer listen on POLLOUT until we get more data. Also, it will be put // in the list of clients to wake up when we do. void put_client_to_sleep(Client *client); - // Add more input data to the stream. You should probably call wake_up_all_clients() - // after that. - void add_data(const char *data, ssize_t bytes); + // Add more data to , adding Metacube headers if needed. + // You should hold the owning Server's . + void add_data_deferred(const char *data, size_t bytes); - // We have more data, so mark all clients that are sleeping as ready to go. - void wake_up_all_clients(); + // Add queued data to the stream, if any. + // You should hold the owning Server's _and_ . + void process_queued_data(); private: Stream(const Stream& other); + // Adds data directly to the stream file descriptor, without adding headers or + // going through . You should hold the owning Server's + // . void add_data_raw(const char *data, ssize_t bytes); };