X-Git-Url: https://git.sesse.net/?p=cubemap;a=blobdiff_plain;f=serverpool.cpp;h=9f1a7280662a68f35fb40cb8230af9cb75384978;hp=09fe4355fbb4b6fcdc2748c473838cb2f9a2fa84;hb=3fdf2e48bca3edcb0de00e0dbd0d0aae81ba9aa9;hpb=462cb16514a2b691ae4d4b76125b42fda83df712 diff --git a/serverpool.cpp b/serverpool.cpp index 09fe435..9f1a728 100644 --- a/serverpool.cpp +++ b/serverpool.cpp @@ -1,4 +1,5 @@ #include "serverpool.h" +#include "state.pb.h" using namespace std; @@ -13,6 +14,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) { @@ -59,6 +79,13 @@ void ServerPool::run() } } +void ServerPool::stop() +{ + for (int i = 0; i < num_servers; ++i) { + servers[i].stop(); + } +} + vector ServerPool::get_client_stats() const { vector ret;