X-Git-Url: https://git.sesse.net/?p=cubemap;a=blobdiff_plain;f=serverpool.cpp;h=352f7191f209a50630ede4c96a8aecb1ae33cd8a;hp=a2035943d429a53e1c621ab6c773b08fdac56994;hb=40ed7df894c8645c132a5bea2bfb12a9be2b82ef;hpb=e8740ea38fa1b54672a83744549fcd1463403d98 diff --git a/serverpool.cpp b/serverpool.cpp index a203594..352f719 100644 --- a/serverpool.cpp +++ b/serverpool.cpp @@ -1,4 +1,9 @@ +#include + +#include "client.h" +#include "server.h" #include "serverpool.h" +#include "state.pb.h" using namespace std; @@ -13,6 +18,25 @@ ServerPool::~ServerPool() { delete[] servers; } + +CubemapStateProto ServerPool::serialize() +{ + CubemapStateProto state; + + for (int i = 0; i < num_servers; ++i) { + CubemapStateProto local_state = servers[i].serialize(); + + // The stream state should be identical between the servers, so we only store it once. + if (i == 0) { + state.mutable_streams()->MergeFrom(local_state.streams()); + } + for (int j = 0; j < local_state.clients_size(); ++j) { + state.add_clients()->MergeFrom(local_state.clients(j)); + } + } + + return state; +} void ServerPool::add_client(int sock) { @@ -24,10 +48,10 @@ void ServerPool::add_client_from_serialized(const ClientProto &client) servers[clients_added++ % num_servers].add_client_from_serialized(client); } -void ServerPool::add_stream(const std::string &stream_id) +void ServerPool::add_stream(const std::string &stream_id, size_t backlog_size) { for (int i = 0; i < num_servers; ++i) { - servers[i].add_stream(stream_id); + servers[i].add_stream(stream_id, backlog_size); } } @@ -58,3 +82,34 @@ void ServerPool::run() servers[i].run(); } } + +void ServerPool::stop() +{ + for (int i = 0; i < num_servers; ++i) { + servers[i].stop(); + } +} + +vector ServerPool::get_client_stats() const +{ + vector ret; + for (int i = 0; i < num_servers; ++i) { + vector stats = servers[i].get_client_stats(); + ret.insert(ret.end(), stats.begin(), stats.end()); + } + return ret; +} + +void ServerPool::set_mark_pool(const std::string &stream_id, MarkPool *mark_pool) +{ + for (int i = 0; i < num_servers; ++i) { + servers[i].set_mark_pool(stream_id, mark_pool); + } +} + +void ServerPool::set_backlog_size(const std::string &stream_id, size_t new_size) +{ + for (int i = 0; i < num_servers; ++i) { + servers[i].set_backlog_size(stream_id, new_size); + } +}