From a13aae07d69031b9b55862b6af065d66723e0adc Mon Sep 17 00:00:00 2001 From: celian Date: Wed, 17 Apr 2024 22:33:08 +0200 Subject: [PATCH] feat: add users (list users) --- src/server/cmds/cmd_logout.c | 2 ++ src/server/cmds/cmd_subscribe.c | 8 +++--- src/server/cmds/cmd_subscribed.c | 8 +++--- src/server/cmds/cmd_unsubscribe.c | 8 +++--- src/server/cmds/cmd_users.c | 41 +++++++++++++++++++++++++++++++ src/server/command.h | 3 ++- src/server/getters.c | 9 ++++--- 7 files changed, 62 insertions(+), 17 deletions(-) create mode 100644 src/server/cmds/cmd_users.c diff --git a/src/server/cmds/cmd_logout.c b/src/server/cmds/cmd_logout.c index 4a21bf6..ee0c0e5 100644 --- a/src/server/cmds/cmd_logout.c +++ b/src/server/cmds/cmd_logout.c @@ -21,6 +21,8 @@ void cmd_logout(server_t *server, client_t *client) if (client->user == NULL) return; + client->user->status = client->user->status - 1; + printf("-->%d\n", client->user->status); client->user->status -= 1; if (client->user->status < 0) client->user->status = 0; diff --git a/src/server/cmds/cmd_subscribe.c b/src/server/cmds/cmd_subscribe.c index 53e38ff..0f78336 100644 --- a/src/server/cmds/cmd_subscribe.c +++ b/src/server/cmds/cmd_subscribe.c @@ -17,12 +17,12 @@ static team_t *get_team(server_t *server, client_t *client, char *uuid_str) { uuid_t uuid = {0}; + team_t *team = NULL; uuid_parse(uuid_str, uuid); - for (size_t i = 0; i < server->teams.size; i++) { - if (uuid_compare(server->teams.arr[i].uuid, uuid) == 0) - return &server->teams.arr[i]; - } + team = get_team_by_uuid(server, uuid); + if (team) + return team; dprintf(client->fd, "511"); fsync(client->fd); write(client->fd, uuid_str, UUID_STR_LEN); diff --git a/src/server/cmds/cmd_subscribed.c b/src/server/cmds/cmd_subscribed.c index aba405c..a2e9d5b 100644 --- a/src/server/cmds/cmd_subscribed.c +++ b/src/server/cmds/cmd_subscribed.c @@ -18,12 +18,12 @@ static team_t *get_team(server_t *server, client_t *client, char *uuid_str) { uuid_t uuid = {0}; + team_t *team = NULL; uuid_parse(uuid_str, uuid); - for (size_t i = 0; i < server->teams.size; i++) { - if (uuid_compare(server->teams.arr[i].uuid, uuid) == 0) - return &server->teams.arr[i]; - } + team = get_team_by_uuid(server, uuid); + if (team) + return team; dprintf(client->fd, "511"); fsync(client->fd); write(client->fd, uuid_str, UUID_STR_LEN); diff --git a/src/server/cmds/cmd_unsubscribe.c b/src/server/cmds/cmd_unsubscribe.c index 561e08a..cb4a06c 100644 --- a/src/server/cmds/cmd_unsubscribe.c +++ b/src/server/cmds/cmd_unsubscribe.c @@ -18,12 +18,12 @@ static team_t *get_team(server_t *server, client_t *client, char *uuid_str) { uuid_t uuid = {0}; + team_t *team = NULL; uuid_parse(uuid_str, uuid); - for (size_t i = 0; i < server->teams.size; i++) { - if (uuid_compare(server->teams.arr[i].uuid, uuid) == 0) - return &server->teams.arr[i]; - } + team = get_team_by_uuid(server, uuid); + if (team) + return team; dprintf(client->fd, "511"); fsync(client->fd); write(client->fd, uuid_str, UUID_STR_LEN); diff --git a/src/server/cmds/cmd_users.c b/src/server/cmds/cmd_users.c new file mode 100644 index 0000000..42815a8 --- /dev/null +++ b/src/server/cmds/cmd_users.c @@ -0,0 +1,41 @@ +/* +** EPITECH PROJECT, 2024 +** my_teams +** File description: +** cmd_users +*/ + +/* +** EPITECH PROJECT, 2024 +** my_teams +** File description: +** cmd_list +*/ + +#include +#include +#include +#include +#include + +#include "cmds/cmds_utils.h" +#include "command.h" +#include "ressources_infos.h" +#include "server.h" + +void cmd_users(server_t *server, client_t *client) +{ + user_info_t info = {0}; + + if (!server || !client || !is_logged_in(client)) + return; + dprintf(client->fd, "225"); + fsync(client->fd); + write(client->fd, &server->users.size, sizeof(server->users.size)); + for (size_t i = 0; i < server->users.size; i++) { + write( + client->fd, + user_to_info(&server->users.arr[i], &info, NULL), + sizeof(info)); + } +} diff --git a/src/server/command.h b/src/server/command.h index 6e3be7e..29d070e 100644 --- a/src/server/command.h +++ b/src/server/command.h @@ -18,6 +18,7 @@ void cmd_login(server_t *server, client_t *client); void cmd_logout(server_t *server, client_t *client); void cmd_use(server_t *server, client_t *client); void cmd_user(server_t *server, client_t *client); +void cmd_users(server_t *server, client_t *client); void cmd_list(server_t *server, client_t *client); void cmd_subscribe(server_t *server, client_t *client); @@ -47,7 +48,7 @@ static const struct cmd_s { {"UNSUBSCRIBE", cmd_unsubscribe, "unsubscribe from a team"}, {"USE", cmd_use, "sets the command context to a team/channel/thread"}, {"USER", cmd_user, "get details about the requested user"}, - {"USERS", NULL, "get the list of all users that exist on the domain"}, + {"USERS", cmd_users, "get the list of all users that exist on the domain"}, }; void exec_command(server_t *server, client_t *client); diff --git a/src/server/getters.c b/src/server/getters.c index ad1cc3e..0f66557 100644 --- a/src/server/getters.c +++ b/src/server/getters.c @@ -6,6 +6,7 @@ */ #include +#include #include "server.h" @@ -15,7 +16,7 @@ user_t *get_user_by_uuid(server_t *server, uuid_t uuid) for (size_t i = 0; i < server->clients.size; i++) { user = server->clients.arr[i].user; - if (user != NULL && memcmp(user->uuid, uuid, sizeof(uuid_t)) == 0) + if (user != NULL && uuid_compare(user->uuid, uuid) == 0) return user; } return NULL; @@ -27,7 +28,7 @@ team_t *get_team_by_uuid(server_t *server, uuid_t uuid) for (size_t i = 0; i < server->teams.size; i++) { team = &server->teams.arr[i]; - if (memcmp(team->uuid, uuid, sizeof(uuid_t)) == 0) + if (uuid_compare(team->uuid, uuid) == 0) return team; } return NULL; @@ -39,7 +40,7 @@ channel_t *get_channel_by_uuid(team_t *team, uuid_t uuid) for (size_t i = 0; i < team->channels.size; i++) { channel = &team->channels.arr[i]; - if (memcmp(channel->uuid, uuid, sizeof(uuid_t)) == 0) + if (uuid_compare(channel->uuid, uuid) == 0) return channel; } return NULL; @@ -51,7 +52,7 @@ thread_t *get_thread_by_uuid(channel_t *channel, uuid_t uuid) for (size_t i = 0; i < channel->threads.size; i++) { thread = &channel->threads.arr[i]; - if (memcmp(thread->thread_uuid, uuid, sizeof(uuid_t)) == 0) + if (uuid_compare(thread->thread_uuid, uuid) == 0) return thread; } return NULL;