replace vector by list in allfds and add overload operator on list ([], +, -) add temp QUIT and SQUIT

This commit is contained in:
kinou-p 2023-02-12 15:57:28 +01:00
parent 9874d3d7e9
commit be594154fc
12 changed files with 129 additions and 38 deletions

View File

@ -6,7 +6,7 @@
# By: apommier <apommier@student.42.fr> +#+ +:+ +#+ # # By: apommier <apommier@student.42.fr> +#+ +:+ +#+ #
# +#+#+#+#+#+ +#+ # # +#+#+#+#+#+ +#+ #
# Created: 2022/12/01 17:27:29 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 #
# # # #
# **************************************************************************** # # **************************************************************************** #

68
includes/accessList.hpp Normal file
View File

@ -0,0 +1,68 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* accessList.hpp :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2023/02/12 15:48:00 by apommier #+# #+# */
/* Updated: 2023/02/12 15:49:11 by apommier ### ########.fr */
/* */
/* ************************************************************************** */
#include "./ft_irc.hpp"
template<typename T>
class accessList : public std::list<T>{
public :
accessList<T>(){}
accessList<T>( const accessList<T> &src )
{
*this = src;
}
~accessList<T>(){}
accessList<T> &operator=(const accessList<T> &rhs)
{
(void)rhs;
return *this;
}
T &operator[](size_t nbr)
{
size_t i = 0;
std::_List_iterator<T> start = this->begin();
//int start = this->begin()
while (i < nbr)
{
start++;
i++;
}
return (*start);
}
};
template<typename T>
std::_List_iterator<T> operator +(std::_List_iterator<T> ite, size_t const nbr)
{
size_t i = 0;
while (i < nbr)
{
ite++;
i++;
}
return (ite);
}
template<typename T>
int operator -(std::_List_iterator<T> lhs, std::_List_iterator<T> rhs)
{
//rhs plus petit
int i = 0;
while (rhs != lhs)
{
rhs++;
i++;
}
return (i);
}

View File

@ -6,7 +6,7 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */ /* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2022/12/01 17:27:37 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.h> //fcntl #include <fcntl.h> //fcntl
#include <vector> #include <vector>
#include <algorithm> #include <algorithm>
#include <list>
#include "function_tab.hpp" #include "function_tab.hpp"
#include "accessList.hpp"
#define MAX_EVENTS 5 #define MAX_EVENTS 5
#define MAX_CHAN 10 #define MAX_CHAN 10
@ -53,6 +55,7 @@ struct clientData //each client have one
std::string cmdBuffer; std::string cmdBuffer;
std::vector<channelData *> joinedChan; std::vector<channelData *> joinedChan;
int fd; int fd;
int op;
}; };
struct channelData //each chan have one 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 epollFd;
int serverFd; int serverFd;
std::vector<int> userList; std::vector<int> userList;
std::vector<channelData> channelList; // std::vector<channelData> channelList;
std::vector<clientData> userData; // std::vector<clientData> userData;
accessList<channelData> channelList;
accessList<clientData> userData;
int alive;
// std::map<int, channelData> channelList; // std::map<int, channelData> channelList;
// std::map<int, clientData> userData; // std::map<int, clientData> userData;
@ -82,6 +89,10 @@ struct fdList //&allFds in code | /!\ only one on the server | REFERENCE ONLY
/* ************************************************************************** */ /* ************************************************************************** */
/* *********************************UTILS************************************ */ /* *********************************UTILS************************************ */
/* ************************************************************************** */ /* ************************************************************************** */

View File

@ -6,7 +6,7 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */ /* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2023/02/06 14:40:39 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 USER(std::string buffer, fdList &allFds, int userNbr)
{ {
(void)buffer;
(void)allFds;
(void)userNbr;
if (allFds.userData[userNbr].registered == 1) if (allFds.userData[userNbr].registered == 1)
{ {
cmd_error(allFds, allFds.userData[userNbr].fd, "462 * USER :You may not reregister\n"); cmd_error(allFds, allFds.userData[userNbr].fd, "462 * USER :You may not reregister\n");

View File

@ -6,7 +6,7 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */ /* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2023/02/09 17:21:57 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 int find_channel(fdList &allFds, std::string chanName)//return channel nbr
{ {
std::vector<channelData>::iterator start = allFds.channelList.begin(); std::_List_iterator<channelData> start = allFds.channelList.begin();
std::vector<channelData>::iterator pastEnd = allFds.channelList.end(); std::_List_iterator<channelData> pastEnd = allFds.channelList.end();
std::cout << "name1= ---" << chanName << "---\n"; std::cout << "name1= ---" << chanName << "---\n";
while (start != pastEnd) 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 int find_user(fdList &allFds, std::string userName)//return direct user fd
{ {
std::vector<clientData>::iterator start = allFds.userData.begin(); std::_List_iterator<clientData> start = allFds.userData.begin();
std::vector<clientData>::iterator pastEnd = allFds.userData.end(); std::_List_iterator<clientData> pastEnd = allFds.userData.end();
std::cout << "name1= ---" << userName << "---\n"; std::cout << "name1= ---" << userName << "---\n";
while (start != pastEnd) while (start != pastEnd)
{ {

View File

@ -6,7 +6,7 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */ /* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2023/02/11 19:10:26 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 QUIT(std::string buffer, fdList &allFds, int userNbr)
{ {
(void)buffer; std::vector<std::string> splitBuff;
(void)allFds; split(buffer, ' ', splitBuff);
(void)userNbr; if (splitBuff.size() == 2)
{
//print message?
}
delete_user(allFds, userNbr);
return ; return ;
} }

View File

@ -6,7 +6,7 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */ /* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2023/02/11 19:11:03 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)buffer;
(void)allFds; (void)allFds;
(void)userNbr; (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 ; return ;
} }

View File

@ -6,7 +6,7 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */ /* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2022/12/06 22:01:25 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 ; return ;
allFds.userData[userNbr].cmdBuffer.erase(allFds.userData[userNbr].cmdBuffer.size() - 1); allFds.userData[userNbr].cmdBuffer.erase(allFds.userData[userNbr].cmdBuffer.size() - 1);
split(allFds.userData[userNbr].cmdBuffer, ' ', splitBuff); split(allFds.userData[userNbr].cmdBuffer, ' ', splitBuff);
//std::cout << "BUFFER In PARSING: ---" << allFds.userData[userNbr].cmdBuffer << "---" << std::endl; //std::cout << "BUFFER In PARSING: ---" << allFds.userData[userNbr].cmdBuffer << "---" << std::endl;
while (a < allFds.parsingTab.cmdNbr - 1 && splitBuff[0] != allFds.parsingTab.cmdName[a]) while (a < allFds.parsingTab.cmdNbr - 1 && splitBuff[0] != allFds.parsingTab.cmdName[a])
a++; a++;

View File

@ -6,7 +6,7 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */ /* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2022/12/09 22:26:27 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; clientData newElement;
newElement.fd = newFd; newElement.fd = newFd;
newElement.op = 0;
allFds.userData.push_back(newElement); allFds.userData.push_back(newElement);
//allFds.userData[allFds.nbrUser].fd = allFds.userList[allFds.nbrUser]; //allFds.userData[allFds.nbrUser].fd = allFds.userList[allFds.nbrUser];
//std::cout << "newConnection | user in data fd = " << allFds.userData[allFds.nbrUser].fd << std::endl; //std::cout << "newConnection | user in data fd = " << allFds.userData[allFds.nbrUser].fd << std::endl;

View File

@ -6,7 +6,7 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */ /* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2022/12/06 21:58:13 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) void start_loop(fdList &allFds)
{ {
bool alive = true; //bool alive = true;
//int readChar; //int readChar;
int eventNbr; int eventNbr;
int i; int i;
//int userId; //int userId;
int nbr; int nbr;
allFds.alive = 1;
std::cout << "serverFd: " << allFds.serverFd << std::endl; 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 << "\n\n\nwhile alive event loop" << std::endl;
//std::cout << "in loop nbr user = " << allFds.nbrUser << std::endl; //std::cout << "in loop nbr user = " << allFds.nbrUser << std::endl;
eventNbr = epoll_wait(allFds.epollFd, allFds.events, MAX_EVENTS, 5000); 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(); nbr = find(allFds.userList.begin(), allFds.userList.end(), allFds.events[i].data.fd) - allFds.userList.begin();
//if (!clientRequest(allFds, i)) //if (!clientRequest(allFds, i))
if (!clientRequest(allFds, nbr)) // if (!clientRequest(allFds, nbr))
alive = false; // alive = false;
clientRequest(allFds, nbr);
} }
} }

View File

@ -6,7 +6,7 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */ /* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2022/12/06 21:44:20 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); //int addrLen = sizeof(addr);
fdList allFds; fdList allFds;
allFds.userData.reserve(MAX_EVENTS); //allFds.userData.reserve(MAX_EVENTS);
allFds.channelList.reserve(MAX_CHAN); //allFds.channelList.reserve(MAX_CHAN);
allFds.nbrUser = 0; allFds.nbrUser = 0;
allFds.serverFd = socket(AF_INET, SOCK_STREAM, 0); allFds.serverFd = socket(AF_INET, SOCK_STREAM, 0);

View File

@ -6,7 +6,7 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */ /* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2022/12/06 21:46:41 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; std::cout << "Delete user nbr " << userNbr << std::endl;
// for (size_t i = 0; i < allFds.userData[userNbr].joinedChan.size(); i++)//all joined 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]); 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*/) //allFds.userData[userNbr].joinedChan[i].erase(find_user_in_chan(allFds.userData[userNbr].joinedChan[i])/*find user in chan*/)
// } }
close(allFds.userData[userNbr].fd); close(allFds.userData[userNbr].fd);
allFds.userData.erase(allFds.userData.begin() + userNbr); allFds.userData.erase(allFds.userData.begin() + userNbr);