#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; }