From 0efd01a956e0f524f3c084548b314f40f6831441 Mon Sep 17 00:00:00 2001 From: Your Name Date: Wed, 30 Apr 2025 11:53:44 +0200 Subject: base project --- main.c | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 main.c (limited to 'main.c') diff --git a/main.c b/main.c new file mode 100644 index 0000000..495d094 --- /dev/null +++ b/main.c @@ -0,0 +1,57 @@ +#include "client.h" +#include "chatroom.h" +#include +#include +#include +#include +#include +#include + +#define PORT 6667 +#define MAX_CLIENTS 10 + +client_t *clients[MAX_CLIENTS] = {0}; +pthread_mutex_t clients_mutex = PTHREAD_MUTEX_INITIALIZER; + +int main() { + int server_sock = socket(AF_INET, SOCK_STREAM, 0); + struct sockaddr_in server_addr = { + .sin_family = AF_INET, + .sin_addr.s_addr = INADDR_ANY, + .sin_port = htons(PORT) + }; + + bind(server_sock, (struct sockaddr *)&server_addr, sizeof(server_addr)); + listen(server_sock, MAX_CLIENTS); + load_chatrooms("chatrooms.txt"); + + printf("Server listening on port %d...\n", PORT); + + while (1) { + struct sockaddr_in client_addr; + socklen_t len = sizeof(client_addr); + int client_sock = accept(server_sock, (struct sockaddr *)&client_addr, &len); + + client_t *cli = malloc(sizeof(client_t)); + cli->socket = client_sock; + cli->address = client_addr; + strcpy(cli->username, "anonymous"); + strcpy(cli->room, ""); + + pthread_mutex_lock(&clients_mutex); + for (int i = 0; i < MAX_CLIENTS; i++) { + if (!clients[i]) { + clients[i] = cli; + pthread_t tid; + pthread_create(&tid, NULL, handle_client, cli); + pthread_detach(tid); + break; + } + } + pthread_mutex_unlock(&clients_mutex); + } + + close(server_sock); + return 0; +} + -- cgit v1.2.3