void Server::add_data(const string &stream_id, const char *data, size_t bytes)
{
- // TODO
+ MutexLock lock(&mutex);
+ assert(streams.count(stream_id) != 0);
+ Stream *stream = &streams[stream_id];
+ size_t pos = stream->data_size % BACKLOG_SIZE;
+ stream->data_size += bytes;
+
+ if (pos + bytes > BACKLOG_SIZE) {
+ size_t to_copy = BACKLOG_SIZE - pos;
+ memcpy(stream->data + pos, data, to_copy);
+ data += to_copy;
+ bytes -= to_copy;
+ pos = 0;
+ }
+
+ memcpy(stream->data + pos, data, bytes);
+
+ // TODO: wake up clients
}
void Server::process_client(Client *client)
return;
}
client->bytes_sent += ret;
+
+ // TODO: put clients to sleep
+
break;
}
default: