my_teams
server.h
Go to the documentation of this file.
1 /*
2 ** EPITECH PROJECT, 2024
3 ** my_teams [WSL: Arch]
4 ** File description:
5 ** server
6 */
7 
8 #ifndef SERVER_H_
9  #define SERVER_H_
10 
11  #include "events_structures.h"
12  #include "protocol.h"
13 
14  #define SEND_TYPE (void)p_server_send_packet_type
15  #define COMBINE(x, y) (x << 8) + y
16  #define ERROR_PACKET(x, y) COMBINE(x, y), payload->fd, server->socket
17 
18  #define SAVE_FILE ".save.out"
19 
20 typedef struct s_user_s {
24 
25 typedef struct s_team_s {
29 
30 typedef struct s_channel_s {
34 
35 typedef struct s_thread_s {
39 
40 typedef struct s_reply_s {
44 
45 typedef struct s_private_message_s {
49 
50 typedef struct s_subscribe_s {
54 
55 typedef struct {
56  char uuid[UUID_LENGTH];
57  char name[MAX_NAME_LENGTH];
58  int socket;
60 
61 typedef struct s_logged_user_s {
65 
66 typedef struct {
67  TAILQ_HEAD(, s_user_s) users;
68  TAILQ_HEAD(, s_team_s) teams;
69  TAILQ_HEAD(, s_channel_s) channels;
70  TAILQ_HEAD(, s_thread_s) threads;
71  TAILQ_HEAD(, s_reply_s) replies;
72  TAILQ_HEAD(, s_private_message_s) private_messages;
73  TAILQ_HEAD(, s_subscribe_s) subscribes;
75 
78 } s_server_t;
79 
84 void server(const char *str_port);
85 
90 char *get_uuid(void);
91 
97 char *get_uuid_no_malloc(char *uuid);
98 
104 bool save(s_server_t *server);
105 
110 void load(s_server_t *server);
111 
117 
124 
131 
138 
145  const p_payload_t *payload);
146 
153  const p_payload_t *payload);
154 
161 
168  const p_payload_t *payload);
169 
176  const p_payload_t *payload);
177 
184  const p_payload_t *payload);
185 
192  const p_payload_t *payload);
193 
200  const p_payload_t *payload);
201 
208  const p_payload_t *payload);
209 
216  const p_payload_t *payload);
217 
224 
231  const p_payload_t *payload);
232 
239  const p_payload_t *payload);
240 
247  const p_payload_t *payload);
248 
255  const p_payload_t *payload);
256 
263  const p_payload_t *payload);
264 
271  const p_payload_t *payload);
272 
279  const p_payload_t *payload);
280 
286 void s_server_event_ping(s_server_t *server, const p_payload_t *payload);
287 
295 bool is_in_teams(const s_server_t *server, const char *user_uuid,
296  const char *team_uuid);
297 
305 bool is_in_channels(const s_server_t *server, const char *user_uuid,
306  const char *channel_uuid);
307 
315 bool is_in_threads(const s_server_t *server, const char *user_uuid,
316  const char *thread_uuid);
317 
324 bool is_logged(const s_server_t *server, const char *user_uuid);
325 
332 bool as_team(const s_server_t *server, const char *team_uuid);
333 
340 bool as_channel(const s_server_t *server, const char *channel_uuid);
341 
348 bool as_thread(const s_server_t *server, const char *thread_uuid);
349 
356 bool as_user(const s_server_t *server, const char *user_uuid);
357 
365 bool check_uuid(const s_server_t *server, int fd, char **uuid, uint16_t type);
366 
367 #endif /* !SERVER_H_ */
#define MAX_NAME_LENGTH
Definition: commands.h:15
#define UUID_LENGTH
Definition: events_structures.h:11
uint16_t type
Definition: logger.h:152
void clear_server(s_server_t *server)
Clear the server.
Definition: clear.c:89
void s_server_event_list_channels(s_server_t *server, const p_payload_t *payload)
Handle list channels event.
Definition: list_team.c:36
void s_server_event_channel_created(s_server_t *server, const p_payload_t *payload)
Handle create channel event.
Definition: created.c:60
bool is_in_teams(const s_server_t *server, const char *user_uuid, const char *team_uuid)
Check if a user is in a team.
Definition: is_in.c:12
struct s_reply_s s_reply_t
void load(s_server_t *server)
Load the server.
Definition: load.c:117
char * get_uuid_no_malloc(char *uuid)
Get a UUID (version 4) without malloc.
Definition: uuid.c:26
void s_server_event_reply_created(s_server_t *server, const p_payload_t *payload)
Handle create reply event.
Definition: created.c:160
struct s_user_s s_user_t
void s_server_event_unsubscribe(s_server_t *server, const p_payload_t *payload)
Handle unsubscribe event.
Definition: miscellaneous.c:79
bool check_uuid(const s_server_t *server, int fd, char **uuid, uint16_t type)
Check if a UUID is allocated.
Definition: check.c:66
void s_server_event_get_thread_info(s_server_t *server, const p_payload_t *payload)
Handle get thread info event.
Definition: info.c:71
void s_server_event_list_messages(s_server_t *server, const p_payload_t *payload)
Handle list messages event.
Definition: list.c:46
void s_server_event_thread_created(s_server_t *server, const p_payload_t *payload)
Handle create thread event.
Definition: created.c:109
void s_server_event_subscribe(s_server_t *server, const p_payload_t *payload)
Handle subscribe event.
Definition: miscellaneous.c:55
struct s_channel_s s_channel_t
char * get_uuid(void)
Get a UUID (version 4)
Definition: uuid.c:13
void s_server_event_get_user_info(s_server_t *server, const p_payload_t *payload)
Handle get user info event.
Definition: info.c:13
struct s_private_message_s s_private_message_t
void s_server_event_ping(s_server_t *server, const p_payload_t *payload)
Handle ping event.
Definition: miscellaneous.c:15
void server(const char *str_port)
Create a server.
Definition: server.c:56
struct s_subscribe_s s_subscribe_t
bool as_channel(const s_server_t *server, const char *channel_uuid)
Check if a channel with a UUID exists.
Definition: check.c:27
void s_server_event_list_users(s_server_t *server, const p_payload_t *payload)
Handle list users event.
Definition: list.c:22
void s_server_event_logged_out(s_server_t *server, const p_payload_t *payload)
Handle disconnect event.
Definition: logged.c:71
bool as_user(const s_server_t *server, const char *user_uuid)
Check if a user with a UUID exists.
Definition: check.c:53
void s_server_event_get_team_info(s_server_t *server, const p_payload_t *payload)
Handle get team info event.
Definition: info.c:35
bool is_in_channels(const s_server_t *server, const char *user_uuid, const char *channel_uuid)
Check if a user is in a channel.
Definition: is_in.c:24
void s_server_event_list_threads(s_server_t *server, const p_payload_t *payload)
Handle list threads event.
Definition: list_team.c:60
void s_server_event_send_message(s_server_t *server, const p_payload_t *payload)
Handle send message event.
Definition: miscellaneous.c:35
struct s_logged_user_s s_logged_user_t
void s_server_event_team_created(s_server_t *server, const p_payload_t *payload)
Handle create team event.
Definition: created.c:26
bool save(s_server_t *server)
Save the server.
Definition: save.c:125
bool as_thread(const s_server_t *server, const char *thread_uuid)
Check if a thread with a UUID exists.
Definition: check.c:40
void s_server_event_get_channel_info(s_server_t *server, const p_payload_t *payload)
Handle get channel info event.
Definition: info.c:53
void s_server_event_list_subscribed_teams(s_server_t *server, const p_payload_t *payload)
Handle list subscribed teams event.
Definition: list.c:95
bool as_team(const s_server_t *server, const char *team_uuid)
Check if a team with a UUID exists.
Definition: check.c:14
void s_server_event_list_teams(s_server_t *server, const p_payload_t *payload)
Handle list teams event.
Definition: list_team.c:14
void s_server_event_logged_in(s_server_t *server, const p_payload_t *payload)
Handle login event.
Definition: logged.c:48
bool is_logged(const s_server_t *server, const char *user_uuid)
Check if a user is logged.
Definition: is_in.c:47
struct s_thread_s s_thread_t
void s_server_event_list_replies(s_server_t *server, const p_payload_t *payload)
Handle list replies event.
Definition: list_team.c:84
bool is_in_threads(const s_server_t *server, const char *user_uuid, const char *thread_uuid)
Check if a user is in a thread.
Definition: is_in.c:35
void s_server_event_list_subscribed_users_in_team(s_server_t *server, const p_payload_t *payload)
Handle list subscribed users in team event.
Definition: list.c:71
struct s_team_s s_team_t
Definition: events_structures.h:126
Definition: server.h:55
int socket
Definition: server.h:58
Represents a payload containing packet, network data, and actual data.
Definition: protocol.h:41
Represents a server with network data, file descriptor set, and list of clients.
Definition: protocol.h:67
Definition: events_structures.h:52
Definition: events_structures.h:168
Definition: server.h:30
TAILQ_ENTRY(s_channel_s) entries
channel_t channel
Definition: server.h:31
Definition: server.h:61
logged_user_t user
Definition: server.h:62
TAILQ_ENTRY(s_logged_user_s) entries
Definition: server.h:45
TAILQ_ENTRY(s_private_message_s) entries
private_message_t message
Definition: server.h:46
Definition: server.h:40
TAILQ_ENTRY(s_reply_s) entries
reply_t reply
Definition: server.h:41
Definition: server.h:66
TAILQ_HEAD(, s_reply_s) replies
p_server_t * socket
Definition: server.h:76
int current_fd
Definition: server.h:77
TAILQ_HEAD(, s_thread_s) threads
TAILQ_HEAD(, s_subscribe_s) subscribes
TAILQ_HEAD(, s_user_s) users
TAILQ_HEAD(, s_logged_user_s) logged
TAILQ_HEAD(, s_private_message_s) private_messages
TAILQ_HEAD(, s_channel_s) channels
TAILQ_HEAD(, s_team_s) teams
Definition: server.h:50
subscribe_t subscribe
Definition: server.h:51
TAILQ_ENTRY(s_subscribe_s) entries
Definition: server.h:25
TAILQ_ENTRY(s_team_s) entries
team_t team
Definition: server.h:26
Definition: server.h:35
TAILQ_ENTRY(s_thread_s) entries
thread_t thread
Definition: server.h:36
Definition: server.h:20
TAILQ_ENTRY(s_user_s) entries
user_t user
Definition: server.h:21
Definition: events_structures.h:64
Definition: events_structures.h:43
Definition: events_structures.h:147
Definition: events_structures.h:25