summaryrefslogtreecommitdiff
path: root/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'main.c')
-rw-r--r--main.c57
1 files changed, 57 insertions, 0 deletions
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 <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;
+}
+