From df3657b2a99ef20da99ac3c6c02f43cc23e70fca Mon Sep 17 00:00:00 2001 From: Nathanael Sensfelder Date: Fri, 20 Jan 2017 22:19:09 +0100 Subject: Moving towards a server/clients structure. --- src/server/server.c | 59 +++++++++++++++++++++++++++++++++++++++++++++++ src/server/server.h | 39 +++++++++++++++++++++++++++++++ src/server/server_types.h | 30 ++++++++++++++++++++++++ 3 files changed, 128 insertions(+) create mode 100644 src/server/server.c create mode 100644 src/server/server.h create mode 100644 src/server/server_types.h (limited to 'src/server') 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 + +#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 + +#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 -- cgit v1.2.3-70-g09d2