diff options
Diffstat (limited to 'main.c')
-rw-r--r-- | main.c | 57 |
1 files changed, 57 insertions, 0 deletions
@@ -0,0 +1,57 @@ +#include "client.h" +#include "chatroom.h" +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <unistd.h> +#include <arpa/inet.h> +#include <pthread.h> + +#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; +} + |