refactor(server): clean code

This commit is contained in:
2025-09-12 21:16:19 +02:00
parent b0151ca885
commit 15a0f0290b
9 changed files with 164 additions and 141 deletions

View File

@@ -6,6 +6,8 @@
#include <signal.h>
#include "utils/config.h"
#include "utils/utils.h"
#include "worker.h"
/* Clients max queue */
#define CWS_SERVER_BACKLOG 128
@@ -17,38 +19,26 @@
#define CWS_SERVER_MAX_REQUEST_SIZE (16 * 1024) /* 16KB */
#define CWS_WORKERS_NUM 6
/* Main server loop */
extern volatile sig_atomic_t cws_server_run;
typedef enum cws_server_ret {
CWS_SERVER_OK,
CWS_SERVER_CONFIG,
CWS_SERVER_FD_ERROR,
CWS_SERVER_CLIENT_NOT_FOUND,
CWS_SERVER_CLIENT_DISCONNECTED,
CWS_SERVER_CLIENT_DISCONNECTED_ERROR,
CWS_SERVER_HTTP_PARSE_ERROR,
CWS_SERVER_GETADDRINFO_ERROR,
CWS_SERVER_SOCKET_ERROR,
CWS_SERVER_SETSOCKOPT_ERROR,
CWS_SERVER_BIND_ERROR,
CWS_SERVER_LISTEN_ERROR,
CWS_SERVER_EPOLL_ADD_ERROR,
CWS_SERVER_EPOLL_DEL_ERROR,
CWS_SERVER_FD_NONBLOCKING_ERROR,
CWS_SERVER_ACCEPT_CLIENT_ERROR,
CWS_SERVER_HASHMAP_INIT,
CWS_SERVER_MALLOC_ERROR,
CWS_SERVER_REQUEST_TOO_LARGE,
CWS_SERVER_THREADPOOL_ERROR,
CWS_SERVER_EPOLL_CREATE_ERROR,
CWS_SERVER_WORKER_ERROR,
} cws_server_ret;
typedef struct cws_server {
int epfd;
int sockfd;
cws_worker_s **workers;
cws_config_s *config;
} cws_server_s;
cws_server_ret cws_server_setup(cws_config_s *config, cws_server_s *server);
cws_server_ret cws_server_loop(cws_server_s *server);
void cws_server_shutdown(cws_server_s *server);
int cws_server_handle_new_client(int server_fd);
cws_server_ret cws_server_start(cws_config_s *config);
cws_server_ret cws_server_loop(int server_fd, cws_config_s *config);
int cws_server_handle_new_client(int server_fd, hashmap_s *clients);
int cws_server_accept_client(int server_fd, struct sockaddr_storage *their_sa, socklen_t *theirsa_size);
cws_server_ret cws_fd_set_nonblocking(int sockfd);
#endif

View File

@@ -3,25 +3,33 @@
#include <myclib/myhashmap.h>
#include <pthread.h>
#include <signal.h>
#include "server/server.h"
#include "../utils/config.h"
#include "../utils/utils.h"
extern volatile sig_atomic_t cws_server_run;
typedef struct cws_worker {
int epfd;
int pipefd[2];
size_t clients_num;
pthread_t thread;
hashmap_s *clients;
cws_config_s *config;
} cws_worker_s;
cws_worker_s **cws_worker_init(size_t workers_num, hashmap_s *clients, cws_config_s *config);
cws_worker_s **cws_worker_new(size_t workers_num, cws_config_s *config);
void cws_worker_free(cws_worker_s **workers, size_t workers_num);
void *cws_worker_loop(void *arg);
void cws_server_close_client(int epfd, int client_fd, hashmap_s *clients);
void cws_server_close_client(int epfd, int client_fd);
cws_server_ret cws_epoll_add(int epfd, int sockfd, uint32_t events);
cws_server_ret cws_epoll_del(int epfd, int sockfd);
cws_server_ret cws_server_handle_client_data(int epfd, int client_fd, hashmap_s *clients, cws_config_s *config);
cws_server_ret cws_server_handle_client_data(int epfd, int client_fd, cws_config_s *config);
#endif

View File

@@ -19,6 +19,7 @@ typedef struct cws_config {
} cws_config_s;
cws_config_s *cws_config_init(void);
void cws_config_free(cws_config_s *config);
#endif

View File

@@ -4,6 +4,33 @@
#include <myclib/mysocket.h>
#include <stdbool.h>
typedef enum cws_server_ret {
CWS_SERVER_OK,
CWS_SERVER_CONFIG,
CWS_SERVER_FD_ERROR,
CWS_SERVER_CLIENT_NOT_FOUND,
CWS_SERVER_CLIENT_DISCONNECTED,
CWS_SERVER_CLIENT_DISCONNECTED_ERROR,
CWS_SERVER_HTTP_PARSE_ERROR,
CWS_SERVER_GETADDRINFO_ERROR,
CWS_SERVER_SOCKET_ERROR,
CWS_SERVER_SETSOCKOPT_ERROR,
CWS_SERVER_BIND_ERROR,
CWS_SERVER_LISTEN_ERROR,
CWS_SERVER_EPOLL_ADD_ERROR,
CWS_SERVER_EPOLL_DEL_ERROR,
CWS_SERVER_FD_NONBLOCKING_ERROR,
CWS_SERVER_ACCEPT_CLIENT_ERROR,
CWS_SERVER_HASHMAP_INIT,
CWS_SERVER_MALLOC_ERROR,
CWS_SERVER_REQUEST_TOO_LARGE,
CWS_SERVER_THREADPOOL_ERROR,
CWS_SERVER_EPOLL_CREATE_ERROR,
CWS_SERVER_WORKER_ERROR,
} cws_server_ret;
cws_server_ret cws_fd_set_nonblocking(int sockfd);
void cws_utils_get_client_ip(struct sockaddr_storage *sa, char *ip);
/* Functions used for hash maps */