From 06b44d17c76dc3346a64eac82940a32835e08789 Mon Sep 17 00:00:00 2001 From: Rockingcool Date: Mon, 3 Apr 2023 09:48:30 -0500 Subject: [PATCH] Added code for client connections --- main.c | 71 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 69 insertions(+), 2 deletions(-) diff --git a/main.c b/main.c index 4585e9e..b020224 100644 --- a/main.c +++ b/main.c @@ -1,21 +1,88 @@ #include "message.h" #include "user.h" +#include "easysock.h" #include #include #include +#include +#include +#include + +#define BUFFER_SIZE 10000 +#define MAX_CONNECTIONS 100 int num_of_lines(char* filename); char* file_to_string(char* filename); User* create_user_list(char* filename); int main() { + struct sockaddr temp_addr; + socklen_t temp_addrlen; + fd_set read_fd_set; + int conn_sockets[MAX_CONNECTIONS] = {0}; + FD_ZERO(&read_fd_set); + char buffer[BUFFER_SIZE]; User* users = create_user_list("user_file.txt"); - Message message = new_message("Hello, this is a text message",users[0],users[1]); + struct sockaddr addr_struct; + int server_sock = create_local(4,'T',"127.0.0.1",30000,&addr_struct); + conn_sockets[0] = server_sock; + + assert(listen(server_sock,MAX_CONNECTIONS) == 0); + + while (true) { + FD_ZERO(&read_fd_set); + for (int i=0; i < sizeof(conn_sockets); i++) { + if (conn_sockets[i] > 0) { + FD_SET(conn_sockets[i],&read_fd_set); + } + } + + int num_conns = select(FD_SETSIZE, &read_fd_set, NULL, NULL, NULL); + + if (num_conns > 0) { + if (FD_ISSET(conn_sockets[0],&read_fd_set)) { + int client_sock = accept(conn_sockets[0],&temp_addr,&temp_addrlen); + for (int i=0;i < sizeof(conn_sockets); i++) { + if (conn_sockets[i] <= 0) { + conn_sockets[i] = client_sock; + break; + } + } + } + + for (int i=1; i < sizeof(conn_sockets); i++) { + printf("Checking FD: %d\n",i); + if (FD_ISSET(conn_sockets[i],&read_fd_set)) { + int num_bytes_read = recv(conn_sockets[i],buffer,sizeof(buffer),0); + if (num_bytes_read <= 0) { + close(conn_sockets[i]); + conn_sockets[i] = -1; + } else { + for (int i=0;i