1 #include "serverpool.h"
6 ServerPool::ServerPool(int size)
7 : servers(new Server[size]),
13 ServerPool::~ServerPool()
18 CubemapStateProto ServerPool::serialize()
20 CubemapStateProto state;
22 for (int i = 0; i < num_servers; ++i) {
23 CubemapStateProto local_state = servers[i].serialize();
25 // The stream state should be identical between the servers, so we only store it once.
27 state.mutable_streams()->MergeFrom(local_state.streams());
29 for (int j = 0; j < local_state.clients_size(); ++j) {
30 state.add_clients()->MergeFrom(local_state.clients(j));
37 void ServerPool::add_client(int sock)
39 servers[clients_added++ % num_servers].add_client_deferred(sock);
42 void ServerPool::add_client_from_serialized(const ClientProto &client)
44 servers[clients_added++ % num_servers].add_client_from_serialized(client);
47 void ServerPool::add_stream(const std::string &stream_id)
49 for (int i = 0; i < num_servers; ++i) {
50 servers[i].add_stream(stream_id);
54 void ServerPool::add_stream_from_serialized(const StreamProto &stream)
56 for (int i = 0; i < num_servers; ++i) {
57 servers[i].add_stream_from_serialized(stream);
61 void ServerPool::set_header(const std::string &stream_id, const std::string &header)
63 for (int i = 0; i < num_servers; ++i) {
64 servers[i].set_header(stream_id, header);
68 void ServerPool::add_data(const std::string &stream_id, const char *data, size_t bytes)
70 for (int i = 0; i < num_servers; ++i) {
71 servers[i].add_data_deferred(stream_id, data, bytes);
75 void ServerPool::run()
77 for (int i = 0; i < num_servers; ++i) {
82 void ServerPool::stop()
84 for (int i = 0; i < num_servers; ++i) {
89 vector<ClientStats> ServerPool::get_client_stats() const
91 vector<ClientStats> ret;
92 for (int i = 0; i < num_servers; ++i) {
93 vector<ClientStats> stats = servers[i].get_client_stats();
94 ret.insert(ret.end(), stats.begin(), stats.end());
99 void ServerPool::set_mark_pool(const std::string &stream_id, MarkPool *mark_pool)
101 for (int i = 0; i < num_servers; ++i) {
102 servers[i].set_mark_pool(stream_id, mark_pool);