| summaryrefslogtreecommitdiff | 
diff options
Diffstat (limited to 'src/server/server.c')
| -rw-r--r-- | src/server/server.c | 59 | 
1 files changed, 59 insertions, 0 deletions
diff --git a/src/server/server.c b/src/server/server.c new file mode 100644 index 0000000..3ded7cc --- /dev/null +++ b/src/server/server.c @@ -0,0 +1,59 @@ +#include <signal.h> + +#include "../cli/parameters.h" + +#include "server.h" + +volatile char ZoO_SERVER_IS_RUNNING = (char) 1; + +static void request_termination (int const signo) +{ +   if ((signo == SIGINT) || (signo == SIGTERM)) +   { +      ZoO_SERVER_IS_RUNNING = (char) 0; +   } +} + +int ZoO_server_main (const struct ZoO_parameters params) +{ +   struct ZoO_server server; +   struct ZoO_server_message msg_buffer; + +   if +   ( +      ZoO_server_initialize +      ( +         &server, +         ZoO_parameters_get_session_name(¶ms) +      ) < 0 +   ) +   { +      return -1; +   } + +   while ((ZoO_SERVER_IS_RUNNING == (char) 1) || (server.running_threads > 0)) +   { +      if (ZoO_server_receive_message(&server, &msg_buffer) < 0) +      { +         ZoO_server_no_mq_termination(&server); + +         break; +      } + +      switch (msg_buffer.type) +      { +         case 'C': +            ZoO_server_new_client(&server, &msg_buffer); + +         case 'J': +            ZoO_server_join_thread(&server, &msg_buffer); + +         default: +            break; +      } +   } + +   ZoO_server_finalize(&server); + +   return 0; +}  | 


