summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/server')
-rw-r--r--src/server/server.c4
-rw-r--r--src/server/server.h2
-rw-r--r--src/server/server_types.h10
-rw-r--r--src/server/server_worker.c31
-rw-r--r--src/server/server_worker_receive.c20
5 files changed, 59 insertions, 8 deletions
diff --git a/src/server/server.c b/src/server/server.c
index 874f5eb..197faf6 100644
--- a/src/server/server.c
+++ b/src/server/server.c
@@ -26,7 +26,7 @@ int ZoO_server_main
while (ZoO_server_is_running())
{
- switch (ZoO_server_wait_for_new_event(&server))
+ switch (ZoO_server_wait_for_event(&server))
{
case 0: /* Timed out or signal'd. */
ZoO_server_handle_joining_threads(&server);
@@ -60,7 +60,7 @@ int ZoO_server_main
/* Waiting for the threads to join... */
while (server.workers.currently_running > 0)
{
- switch (ZoO_server_wait_for_new_event(&server))
+ switch (ZoO_server_wait_for_event(&server))
{
case 0: /* Timed out. */
case 1: /* New client attempted connection. */
diff --git a/src/server/server.h b/src/server/server.h
index 36ec4ce..90103ed 100644
--- a/src/server/server.h
+++ b/src/server/server.h
@@ -28,7 +28,7 @@ int ZoO_server_main
void ZoO_server_finalize (struct ZoO_server [const restrict static 1]);
-int ZoO_server_wait_for_new_event
+int ZoO_server_wait_for_event
(
struct ZoO_server server [const restrict static 1]
);
diff --git a/src/server/server_types.h b/src/server/server_types.h
index fb78b77..1ba9f96 100644
--- a/src/server/server_types.h
+++ b/src/server/server_types.h
@@ -7,7 +7,11 @@
#include <pthread.h>
#endif
-#include "../core/index.h"
+#include "../core/index_types.h"
+
+#include "../knowledge/knowledge_types.h"
+
+#include "../parameters/parameters_types.h"
#include "../pipe/pipe_types.h"
@@ -54,16 +58,18 @@ struct ZoO_server_thread_parameters
{
struct ZoO_server_thread_collection * thread_collection;
const struct ZoO_parameters * server_params;
+ struct ZoO_knowledge * knowledge;
ZoO_index thread_id;
int socket;
};
struct ZoO_server_worker
{
+ struct ZoO_server_thread_parameters params;
char * buffer;
size_t buffer_capacity;
size_t buffer_length;
- struct ZoO_server_thread_parameters params;
+ FILE * socket_as_file;
};
struct ZoO_server
diff --git a/src/server/server_worker.c b/src/server/server_worker.c
index f6378e0..bd3b5d1 100644
--- a/src/server/server_worker.c
+++ b/src/server/server_worker.c
@@ -1,10 +1,10 @@
-#include <signal.h>
+#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include "server.h"
-static void initialize
+static int initialize
(
struct ZoO_server_worker worker [const restrict static 1],
void * input
@@ -22,6 +22,16 @@ static void initialize
worker->buffer = (char *) NULL;
worker->buffer_capacity = 0;
worker->buffer_length = 0;
+
+ worker->socket_as_file = fdopen(worker->params.socket, "w+");
+
+ if (worker->socket_as_file == (FILE *) NULL)
+ {
+ /* TODO: error message? */
+ return -1;
+ }
+
+ return 0;
}
static void finalize
@@ -29,6 +39,23 @@ static void finalize
struct ZoO_server_worker worker [const restrict static 1]
)
{
+ if (worker->socket_as_file != (FILE *) NULL)
+ {
+ fclose(worker->socket_as_file);
+
+ worker->socket_as_file = NULL;
+ }
+
+ if (worker->buffer != (char *) NULL)
+ {
+ free((void *) worker->buffer);
+
+ worker->buffer = (char *) NULL;
+ }
+
+ worker->buffer_capacity = 0;
+ worker->buffer_length = 0;
+
pthread_mutex_lock(&(worker->params.thread_collection->mutex));
worker->params.thread_collection->threads[worker->params.thread_id].state =
diff --git a/src/server/server_worker_receive.c b/src/server/server_worker_receive.c
index 6e70159..4dc2fc7 100644
--- a/src/server/server_worker_receive.c
+++ b/src/server/server_worker_receive.c
@@ -1,11 +1,29 @@
#include "server.h"
+
int ZoO_server_worker_receive
(
struct ZoO_server_worker worker [const restrict static 1]
)
{
- /* TODO */
+ ssize_t received;
+
+ received =
+ getline
+ (
+ &(worker->buffer),
+ &(worker->buffer_capacity),
+ worker->socket_as_file
+ );
+
+ if (received == -1)
+ {
+ /* TODO: error message? */
+
+ return -1;
+ }
+
+ worker->buffer_length = (size_t) received;
return 0;
}