1 #include <google/protobuf/repeated_field.h>
5 #include "serverpool.h"
10 ServerPool::ServerPool(int size)
11 : servers(new Server[size]),
17 ServerPool::~ServerPool()
22 CubemapStateProto ServerPool::serialize()
24 CubemapStateProto state;
26 for (int i = 0; i < num_servers; ++i) {
27 CubemapStateProto local_state = servers[i].serialize();
29 // The stream state should be identical between the servers, so we only store it once.
31 state.mutable_streams()->MergeFrom(local_state.streams());
33 for (int j = 0; j < local_state.clients_size(); ++j) {
34 state.add_clients()->MergeFrom(local_state.clients(j));
41 void ServerPool::add_client(int sock)
43 servers[clients_added++ % num_servers].add_client_deferred(sock);
46 void ServerPool::add_client_from_serialized(const ClientProto &client)
48 servers[clients_added++ % num_servers].add_client_from_serialized(client);
51 void ServerPool::add_stream(const std::string &stream_id, size_t backlog_size)
53 for (int i = 0; i < num_servers; ++i) {
54 servers[i].add_stream(stream_id, backlog_size);
58 void ServerPool::add_stream_from_serialized(const StreamProto &stream)
60 for (int i = 0; i < num_servers; ++i) {
61 servers[i].add_stream_from_serialized(stream);
65 void ServerPool::set_header(const std::string &stream_id, const std::string &header)
67 for (int i = 0; i < num_servers; ++i) {
68 servers[i].set_header(stream_id, header);
72 void ServerPool::add_data(const std::string &stream_id, const char *data, size_t bytes)
74 for (int i = 0; i < num_servers; ++i) {
75 servers[i].add_data_deferred(stream_id, data, bytes);
79 void ServerPool::run()
81 for (int i = 0; i < num_servers; ++i) {
86 void ServerPool::stop()
88 for (int i = 0; i < num_servers; ++i) {
93 vector<ClientStats> ServerPool::get_client_stats() const
95 vector<ClientStats> ret;
96 for (int i = 0; i < num_servers; ++i) {
97 vector<ClientStats> stats = servers[i].get_client_stats();
98 ret.insert(ret.end(), stats.begin(), stats.end());
103 void ServerPool::set_mark_pool(const std::string &stream_id, MarkPool *mark_pool)
105 for (int i = 0; i < num_servers; ++i) {
106 servers[i].set_mark_pool(stream_id, mark_pool);
110 void ServerPool::set_backlog_size(const std::string &stream_id, size_t new_size)
112 for (int i = 0; i < num_servers; ++i) {
113 servers[i].set_backlog_size(stream_id, new_size);