X-Git-Url: https://git.sesse.net/?p=cubemap;a=blobdiff_plain;f=serverpool.cpp;h=e9fea12944d13455ee7315685a32c7f2ed6fc9ae;hp=9f4f3a42eb2e039d7ce7bd753653b4115f2097fa;hb=HEAD;hpb=20e85bd6901355cc40a6cfb4c0deb7232d9aa63f diff --git a/serverpool.cpp b/serverpool.cpp index 9f4f3a4..7b790c2 100644 --- a/serverpool.cpp +++ b/serverpool.cpp @@ -1,4 +1,5 @@ #include +#include #include #include @@ -43,6 +44,9 @@ CubemapStateProto ServerPool::serialize() for (const ClientProto &client : local_state.clients()) { state.add_clients()->MergeFrom(client); } + for (const HLSZombieProto &hls_zombie : local_state.hls_zombies()) { + state.add_hls_zombies()->MergeFrom(hls_zombie); + } } for (size_t i = 0; i < short_response_pool.size(); ++i) { @@ -65,6 +69,12 @@ void ServerPool::add_client_from_serialized(const ClientProto &client, const std servers[clients_added++ % num_servers].add_client_from_serialized(client, short_responses); } +// It's fine to abuse clients_added here, since it's only ever used for round-robin purposes. +void ServerPool::add_hls_zombie_from_serialized(const HLSZombieProto &hls_zombie) +{ + servers[clients_added++ % num_servers].add_hls_zombie_from_serialized(hls_zombie); +} + int ServerPool::lookup_stream_by_url(const string &url) const { assert(servers != nullptr); @@ -169,6 +179,16 @@ void ServerPool::add_data(int stream_index, const char *data, size_t bytes, uint } } +void ServerPool::set_unavailable(int stream_index) +{ + assert(stream_index >= 0 && stream_index < ssize_t(num_http_streams + udp_streams.size())); + if (stream_index < ssize_t(num_http_streams)) { + for (int i = 0; i < num_servers; ++i) { + servers[i].set_unavailable(stream_index); + } + } +} + void ServerPool::add_gen204(const std::string &url, const std::string &allow_origin) { for (int i = 0; i < num_servers; ++i) { @@ -206,7 +226,17 @@ vector ServerPool::get_client_stats() const } return ret; } - + +vector ServerPool::get_hls_zombies() const +{ + vector ret; + for (int i = 0; i < num_servers; ++i) { + vector stats = servers[i].get_hls_zombies(); + ret.insert(ret.end(), stats.begin(), stats.end()); + } + return ret; +} + void ServerPool::set_pacing_rate(int stream_index, uint32_t pacing_rate) { for (int i = 0; i < num_servers; ++i) {