X-Git-Url: https://git.sesse.net/?p=cubemap;a=blobdiff_plain;f=cubemap.cpp;h=5ef003640ff1cc5780c6cd79c43687324193fcc6;hp=692d48baf1d9e507d36926aa10a7f35f7d8847b1;hb=286d8e26057bda2f472bbefbb7792ff2ca9f1b65;hpb=f3e2d52ccf79454ee157917f9017263a8f4c50c3 diff --git a/cubemap.cpp b/cubemap.cpp index 692d48b..5ef0036 100644 --- a/cubemap.cpp +++ b/cubemap.cpp @@ -9,6 +9,7 @@ #include #include #include +#include #include #include #include @@ -17,6 +18,7 @@ #include "metacube.h" #include "server.h" #include "input.h" +#include "state.pb.h" #define NUM_SERVERS 4 #define STREAM_ID "stream" @@ -26,6 +28,12 @@ using namespace std; Server *servers = NULL; +volatile bool hupped = false; + +void hup(int ignored) +{ + hupped = true; +} int create_server_socket(int port) { @@ -110,11 +118,32 @@ int main(int argc, char **argv) pthread_t acceptor_thread; pthread_create(&acceptor_thread, NULL, acceptor_thread_run, reinterpret_cast(server_sock)); - Input input(STREAM_ID); - input.run(STREAM_URL); + Input input(STREAM_ID, STREAM_URL); + input.run(); + + signal(SIGHUP, hup); + + while (!hupped) { + usleep(100000); + } + + input.stop(); + CubemapStateProto state; for (int i = 0; i < NUM_SERVERS; ++i) { servers[i].stop(); + + 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)); + } } delete[] servers; + + printf("SERIALIZED: [%s]\n", state.DebugString().c_str()); }