diff --git a/src/server.c b/src/server.c index 3901ae2..1b7b1de 100644 --- a/src/server.c +++ b/src/server.c @@ -289,20 +289,33 @@ void *Dispatcher(void *arg) { /* Thread, listens for incoming messages */ void *ClientListener(void *arg) { struct client_details details = *((struct client_details*) arg); - char buf[BUF_LEN]; + char buf[BUF_LEN], client_id_buf[BUF_LEN]; int n = 0; while (1) { - /* Read n bytes at a time, because we don't know how long the message will be */ - while ((n = read(details.sockid, buf, BUF_LEN)) > 0) { - /* TODO: Get mutex */ + /* Loop for as long as there is nothing to read */ + while ((n = read(details.sockid, buf, BUF_LEN)) == 0); + if (n == -1) { + perror("read"); + continue; + } + + /* TODO: Get mutex */ + + /* Write client_id for Dispatcher */ + sprintf(client_id_buf, "%d", details.id); + write(message_buffer[1], client_id_buf, strlen(buf)); + + /* Write what we've read as long as there is something to read */ + do { write(message_buffer[1], buf, n); - /* TODO: Free mutex */ - } - if (n < 0) { - fprintf(stderr, "ERROR: read\n"); - break; + } while ((n = read(details.sockid, buf, BUF_LEN)) > 0); // TODO: we are blocking here, change socket details to make it non blocking? + if (n == -1) { + perror("read"); + continue; } + + /* TODO: Free mutex */ } pthread_exit(0);