From be594154fc2498bda80ca819fc1e1824b9903a24 Mon Sep 17 00:00:00 2001 From: kinou-p Date: Sun, 12 Feb 2023 15:57:28 +0100 Subject: [PATCH] replace vector by list in allfds and add overload operator on list ([], +, -) add temp QUIT and SQUIT --- Makefile | 2 +- includes/accessList.hpp | 68 +++++++++++++++++++++++++ includes/ft_irc.hpp | 19 +++++-- srcs/commands/auth/user.cpp | 6 +-- srcs/commands/channel/channel_utils.cpp | 10 ++-- srcs/commands/other/quit.cpp | 12 +++-- srcs/commands/other/squit.cpp | 10 +++- srcs/commands/parse_commands.cpp | 4 +- srcs/new_connection.cpp | 3 +- srcs/server_loop.cpp | 15 +++--- srcs/start_server.cpp | 6 +-- srcs/utils.cpp | 12 ++--- 12 files changed, 129 insertions(+), 38 deletions(-) create mode 100644 includes/accessList.hpp diff --git a/Makefile b/Makefile index 6f679cb..977e93a 100644 --- a/Makefile +++ b/Makefile @@ -6,7 +6,7 @@ # By: apommier +#+ +:+ +#+ # # +#+#+#+#+#+ +#+ # # Created: 2022/12/01 17:27:29 by apommier #+# #+# # -# Updated: 2023/02/11 20:18:32 by apommier ### ########.fr # +# Updated: 2023/02/12 15:44:05 by apommier ### ########.fr # # # # **************************************************************************** # diff --git a/includes/accessList.hpp b/includes/accessList.hpp new file mode 100644 index 0000000..0599e60 --- /dev/null +++ b/includes/accessList.hpp @@ -0,0 +1,68 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* accessList.hpp :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: apommier +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/02/12 15:48:00 by apommier #+# #+# */ +/* Updated: 2023/02/12 15:49:11 by apommier ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "./ft_irc.hpp" + +template +class accessList : public std::list{ + public : + + accessList(){} + accessList( const accessList &src ) + { + *this = src; + } + ~accessList(){} + + accessList &operator=(const accessList &rhs) + { + (void)rhs; + return *this; + } + + T &operator[](size_t nbr) + { + size_t i = 0; + std::_List_iterator start = this->begin(); + //int start = this->begin() + while (i < nbr) + { + start++; + i++; + } + return (*start); + } +}; + template + std::_List_iterator operator +(std::_List_iterator ite, size_t const nbr) + { + size_t i = 0; + while (i < nbr) + { + ite++; + i++; + } + return (ite); + } + + template + int operator -(std::_List_iterator lhs, std::_List_iterator rhs) + { + //rhs plus petit + int i = 0; + while (rhs != lhs) + { + rhs++; + i++; + } + return (i); + } \ No newline at end of file diff --git a/includes/ft_irc.hpp b/includes/ft_irc.hpp index 867d3e2..05cf6ea 100644 --- a/includes/ft_irc.hpp +++ b/includes/ft_irc.hpp @@ -6,7 +6,7 @@ /* By: apommier +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/12/01 17:27:37 by apommier #+# #+# */ -/* Updated: 2023/02/11 22:49:29 by apommier ### ########.fr */ +/* Updated: 2023/02/12 15:48:37 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ @@ -23,8 +23,10 @@ #include //fcntl #include #include +#include #include "function_tab.hpp" +#include "accessList.hpp" #define MAX_EVENTS 5 #define MAX_CHAN 10 @@ -53,6 +55,7 @@ struct clientData //each client have one std::string cmdBuffer; std::vector joinedChan; int fd; + int op; }; struct channelData //each chan have one @@ -70,9 +73,13 @@ struct fdList //&allFds in code | /!\ only one on the server | REFERENCE ONLY int epollFd; int serverFd; std::vector userList; - std::vector channelList; - std::vector userData; - + // std::vector channelList; + // std::vector userData; + + accessList channelList; + accessList userData; + + int alive; // std::map channelList; // std::map userData; @@ -82,6 +89,10 @@ struct fdList //&allFds in code | /!\ only one on the server | REFERENCE ONLY + + + + /* ************************************************************************** */ /* *********************************UTILS************************************ */ /* ************************************************************************** */ diff --git a/srcs/commands/auth/user.cpp b/srcs/commands/auth/user.cpp index a39cabf..5339476 100644 --- a/srcs/commands/auth/user.cpp +++ b/srcs/commands/auth/user.cpp @@ -6,7 +6,7 @@ /* By: apommier +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2023/02/06 14:40:39 by apommier #+# #+# */ -/* Updated: 2023/02/11 22:44:06 by apommier ### ########.fr */ +/* Updated: 2023/02/12 13:36:30 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ @@ -18,10 +18,6 @@ void USER(std::string buffer, fdList &allFds, int userNbr) { - - (void)buffer; - (void)allFds; - (void)userNbr; if (allFds.userData[userNbr].registered == 1) { cmd_error(allFds, allFds.userData[userNbr].fd, "462 * USER :You may not reregister\n"); diff --git a/srcs/commands/channel/channel_utils.cpp b/srcs/commands/channel/channel_utils.cpp index ad12b54..4319204 100644 --- a/srcs/commands/channel/channel_utils.cpp +++ b/srcs/commands/channel/channel_utils.cpp @@ -6,7 +6,7 @@ /* By: apommier +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2023/02/09 17:21:57 by apommier #+# #+# */ -/* Updated: 2023/02/11 12:25:58 by apommier ### ########.fr */ +/* Updated: 2023/02/12 15:23:10 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ @@ -14,8 +14,8 @@ int find_channel(fdList &allFds, std::string chanName)//return channel nbr { - std::vector::iterator start = allFds.channelList.begin(); - std::vector::iterator pastEnd = allFds.channelList.end(); + std::_List_iterator start = allFds.channelList.begin(); + std::_List_iterator pastEnd = allFds.channelList.end(); std::cout << "name1= ---" << chanName << "---\n"; while (start != pastEnd) { @@ -31,8 +31,8 @@ int find_channel(fdList &allFds, std::string chanName)//return channel nbr int find_user(fdList &allFds, std::string userName)//return direct user fd { - std::vector::iterator start = allFds.userData.begin(); - std::vector::iterator pastEnd = allFds.userData.end(); + std::_List_iterator start = allFds.userData.begin(); + std::_List_iterator pastEnd = allFds.userData.end(); std::cout << "name1= ---" << userName << "---\n"; while (start != pastEnd) { diff --git a/srcs/commands/other/quit.cpp b/srcs/commands/other/quit.cpp index 102d922..e2c4c9a 100644 --- a/srcs/commands/other/quit.cpp +++ b/srcs/commands/other/quit.cpp @@ -6,7 +6,7 @@ /* By: apommier +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2023/02/11 19:10:26 by apommier #+# #+# */ -/* Updated: 2023/02/11 19:10:44 by apommier ### ########.fr */ +/* Updated: 2023/02/12 14:09:33 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ @@ -14,8 +14,12 @@ void QUIT(std::string buffer, fdList &allFds, int userNbr) { - (void)buffer; - (void)allFds; - (void)userNbr; + std::vector splitBuff; + split(buffer, ' ', splitBuff); + if (splitBuff.size() == 2) + { + //print message? + } + delete_user(allFds, userNbr); return ; } \ No newline at end of file diff --git a/srcs/commands/other/squit.cpp b/srcs/commands/other/squit.cpp index 4d39df5..0687523 100644 --- a/srcs/commands/other/squit.cpp +++ b/srcs/commands/other/squit.cpp @@ -6,7 +6,7 @@ /* By: apommier +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2023/02/11 19:11:03 by apommier #+# #+# */ -/* Updated: 2023/02/11 19:11:22 by apommier ### ########.fr */ +/* Updated: 2023/02/12 14:23:39 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ @@ -17,5 +17,13 @@ void SQUIT(std::string buffer, fdList &allFds, int userNbr) (void)buffer; (void)allFds; (void)userNbr; + + if (allFds.userData[userNbr].op) + allFds.alive = 0; + else + { + std::cout << "Not op but okay i'll do it\n"; + allFds.alive = 0; + } return ; } \ No newline at end of file diff --git a/srcs/commands/parse_commands.cpp b/srcs/commands/parse_commands.cpp index 745aaf9..63a68bf 100644 --- a/srcs/commands/parse_commands.cpp +++ b/srcs/commands/parse_commands.cpp @@ -6,7 +6,7 @@ /* By: apommier +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/12/06 22:01:25 by apommier #+# #+# */ -/* Updated: 2023/02/11 22:51:59 by apommier ### ########.fr */ +/* Updated: 2023/02/12 14:21:56 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ @@ -30,7 +30,7 @@ void parse_commands(std::string buffer, fdList &allFds, int userNbr) return ; allFds.userData[userNbr].cmdBuffer.erase(allFds.userData[userNbr].cmdBuffer.size() - 1); split(allFds.userData[userNbr].cmdBuffer, ' ', splitBuff); - + //std::cout << "BUFFER In PARSING: ---" << allFds.userData[userNbr].cmdBuffer << "---" << std::endl; while (a < allFds.parsingTab.cmdNbr - 1 && splitBuff[0] != allFds.parsingTab.cmdName[a]) a++; diff --git a/srcs/new_connection.cpp b/srcs/new_connection.cpp index 17e6bc5..f7dd998 100644 --- a/srcs/new_connection.cpp +++ b/srcs/new_connection.cpp @@ -6,7 +6,7 @@ /* By: apommier +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/12/09 22:26:27 by apommier #+# #+# */ -/* Updated: 2023/02/11 14:47:52 by apommier ### ########.fr */ +/* Updated: 2023/02/12 14:17:36 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ @@ -44,6 +44,7 @@ void new_connection(fdList &allFds) clientData newElement; newElement.fd = newFd; + newElement.op = 0; allFds.userData.push_back(newElement); //allFds.userData[allFds.nbrUser].fd = allFds.userList[allFds.nbrUser]; //std::cout << "newConnection | user in data fd = " << allFds.userData[allFds.nbrUser].fd << std::endl; diff --git a/srcs/server_loop.cpp b/srcs/server_loop.cpp index 545a913..ac486b2 100644 --- a/srcs/server_loop.cpp +++ b/srcs/server_loop.cpp @@ -6,7 +6,7 @@ /* By: apommier +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/12/06 21:58:13 by apommier #+# #+# */ -/* Updated: 2023/02/11 23:51:32 by apommier ### ########.fr */ +/* Updated: 2023/02/12 14:21:04 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ @@ -14,17 +14,19 @@ void start_loop(fdList &allFds) { - bool alive = true; + //bool alive = true; //int readChar; int eventNbr; int i; //int userId; int nbr; + + allFds.alive = 1; std::cout << "serverFd: " << allFds.serverFd << std::endl; - while (alive) + while (allFds.alive) { - std::cout << "loop" << std::endl; + //std::cout << "loop" << std::endl; //std::cout << "\n\n\nwhile alive event loop" << std::endl; //std::cout << "in loop nbr user = " << allFds.nbrUser << std::endl; eventNbr = epoll_wait(allFds.epollFd, allFds.events, MAX_EVENTS, 5000); @@ -44,8 +46,9 @@ void start_loop(fdList &allFds) { nbr = find(allFds.userList.begin(), allFds.userList.end(), allFds.events[i].data.fd) - allFds.userList.begin(); //if (!clientRequest(allFds, i)) - if (!clientRequest(allFds, nbr)) - alive = false; + // if (!clientRequest(allFds, nbr)) + // alive = false; + clientRequest(allFds, nbr); } } diff --git a/srcs/start_server.cpp b/srcs/start_server.cpp index 70e65d6..3bdbd1f 100644 --- a/srcs/start_server.cpp +++ b/srcs/start_server.cpp @@ -6,7 +6,7 @@ /* By: apommier +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/12/06 21:44:20 by apommier #+# #+# */ -/* Updated: 2023/02/11 14:49:36 by apommier ### ########.fr */ +/* Updated: 2023/02/12 15:00:19 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ @@ -28,8 +28,8 @@ void initialize(char **av) //int addrLen = sizeof(addr); fdList allFds; - allFds.userData.reserve(MAX_EVENTS); - allFds.channelList.reserve(MAX_CHAN); + //allFds.userData.reserve(MAX_EVENTS); + //allFds.channelList.reserve(MAX_CHAN); allFds.nbrUser = 0; allFds.serverFd = socket(AF_INET, SOCK_STREAM, 0); diff --git a/srcs/utils.cpp b/srcs/utils.cpp index d559e3a..1a71d8e 100644 --- a/srcs/utils.cpp +++ b/srcs/utils.cpp @@ -6,7 +6,7 @@ /* By: apommier +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/12/06 21:46:41 by apommier #+# #+# */ -/* Updated: 2023/02/11 12:24:33 by apommier ### ########.fr */ +/* Updated: 2023/02/12 14:31:10 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ @@ -59,11 +59,11 @@ void delete_user(fdList &allFds, int userNbr) { std::cout << "Delete user nbr " << userNbr << std::endl; - // for (size_t i = 0; i < allFds.userData[userNbr].joinedChan.size(); i++)//all joined chan - // { - // del_user_in_chan(&allFds.userData[userNbr], allFds.userData[userNbr].joinedChan[i]); - // //allFds.userData[userNbr].joinedChan[i].erase(find_user_in_chan(allFds.userData[userNbr].joinedChan[i])/*find user in chan*/) - // } + for (size_t i = 0; i < allFds.userData[userNbr].joinedChan.size(); i++)//all joined chan + { + del_user_in_chan(&allFds.userData[userNbr], allFds.userData[userNbr].joinedChan[i]); + //allFds.userData[userNbr].joinedChan[i].erase(find_user_in_chan(allFds.userData[userNbr].joinedChan[i])/*find user in chan*/) + } close(allFds.userData[userNbr].fd); allFds.userData.erase(allFds.userData.begin() + userNbr);