Let ClientListener send client_id to Dispatcher
This commit is contained in:
parent
69d0b56607
commit
e693ad35c5
1 changed files with 22 additions and 9 deletions
31
src/server.c
31
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);
|
||||
|
|
Loading…
Reference in a new issue