| summaryrefslogtreecommitdiff | 
diff options
Diffstat (limited to 'src/server')
| -rw-r--r-- | src/server/server.c | 59 | ||||
| -rw-r--r-- | src/server/server.h | 39 | ||||
| -rw-r--r-- | src/server/server_types.h | 30 | 
3 files changed, 128 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; +} diff --git a/src/server/server.h b/src/server/server.h new file mode 100644 index 0000000..a75c6e7 --- /dev/null +++ b/src/server/server.h @@ -0,0 +1,39 @@ +#ifndef _ZoO_SERVER_SERVER_H_ +#define _ZoO_SERVER_SERVER_H_ + +#include "../cli/parameters_types.h" + +#include "server_types.h" + +int ZoO_server_cleanup_session (const char * session); + +int ZoO_server_initialize +( +   struct ZoO_server [const restrict static 1], +   const char * session +); + +int ZoO_server_main (const struct ZoO_parameters params); +int ZoO_server_finalize (struct ZoO_server [const restrict static 1]); + +void ZoO_server_no_mq_termination (struct ZoO_server [const restrict static 1]); + +int ZoO_server_receive_message +( +   struct ZoO_server [const restrict static 1], +   struct ZoO_server_message msg_buffer [const restrict static 1] +); + +int ZoO_server_new_client +( +   struct ZoO_server [const restrict static 1], +   struct ZoO_server_message msg_buffer [const restrict static 1] +); + +int ZoO_server_join_thread +( +   struct ZoO_server [const restrict static 1], +   struct ZoO_server_message msg_buffer [const restrict static 1] +); + +#endif diff --git a/src/server/server_types.h b/src/server/server_types.h new file mode 100644 index 0000000..75016d4 --- /dev/null +++ b/src/server/server_types.h @@ -0,0 +1,30 @@ +#ifndef _ZoO_SERVER_SERVER_TYPES_H_ +#define _ZoO_SERVER_SERVER_TYPES_H_ + +#include <mqueue.h> + +#include "../core/index.h" + +struct ZoO_server_pipes_data +{ +   char request_pipe[255]; +   char reply_pipe[255]; +}; + +struct ZoO_server_message +{ +   char type; +   union +   { +      struct ZoO_server_pipes_data pipes_name; +      ZoO_index pthread_id; +   } data; +}; + +struct ZoO_server +{ +   mqd_t mailbox; +   ZoO_index running_threads; +}; + +#endif  | 


