#define _SERVERPOOL_H 1
#include <stddef.h>
+#include <memory>
#include <string>
#include <vector>
class ServerPool {
public:
ServerPool(int num_servers);
- ~ServerPool();
// Fills streams() and clients().
CubemapStateProto serialize();
// Picks a server (round-robin) and allocates the given client to it.
void add_client(int sock, Acceptor *acceptor);
- void add_client_from_serialized(const ClientProto &client);
+ void add_client_from_serialized(const ClientProto &client, const std::vector<std::shared_ptr<const std::string>> &short_responses);
// Adds the given stream to all the servers. Returns the stream index.
int add_stream(const std::string &url, size_t backlog_size, size_t prebuffering_bytes, Stream::Encoding encoding, Stream::Encoding src_encoding);
std::vector<ClientStats> get_client_stats() const;
private:
- Server *servers;
- int num_servers, clients_added;
+ std::unique_ptr<Server[]> servers;
+ int num_servers, clients_added = 0;
// Our indexing is currently rather primitive; every stream_index in
// [0, num_http_streams) maps to a HTTP stream (of which every Server
// has exactly one copy), and after that, it's mapping directly into
// <udp_streams>.
- int num_http_streams;
- std::vector<UDPStream *> udp_streams;
+ int num_http_streams = 0;
+ std::vector<std::unique_ptr<UDPStream>> udp_streams;
ServerPool(const ServerPool &);
};