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> +#+ +:+ +#+ #
# +#+#+#+#+#+ +#+ #
# 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> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* 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 <vector>
#include <algorithm>
#include <list>
#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<channelData *> 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<int> userList;
std::vector<channelData> channelList;
std::vector<clientData> userData;
// std::vector<channelData> channelList;
// std::vector<clientData> userData;
accessList<channelData> channelList;
accessList<clientData> userData;
int alive;
// std::map<int, channelData> channelList;
// std::map<int, clientData> userData;
@ -82,6 +89,10 @@ struct fdList //&allFds in code | /!\ only one on the server | REFERENCE ONLY
/* ************************************************************************** */
/* *********************************UTILS************************************ */
/* ************************************************************************** */

View File

@ -6,7 +6,7 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* 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");

View File

@ -6,7 +6,7 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* 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<channelData>::iterator start = allFds.channelList.begin();
std::vector<channelData>::iterator pastEnd = allFds.channelList.end();
std::_List_iterator<channelData> start = allFds.channelList.begin();
std::_List_iterator<channelData> 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<clientData>::iterator start = allFds.userData.begin();
std::vector<clientData>::iterator pastEnd = allFds.userData.end();
std::_List_iterator<clientData> start = allFds.userData.begin();
std::_List_iterator<clientData> pastEnd = allFds.userData.end();
std::cout << "name1= ---" << userName << "---\n";
while (start != pastEnd)
{

View File

@ -6,7 +6,7 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* 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<std::string> splitBuff;
split(buffer, ' ', splitBuff);
if (splitBuff.size() == 2)
{
//print message?
}
delete_user(allFds, userNbr);
return ;
}

View File

@ -6,7 +6,7 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* 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 ;
}

View File

@ -6,7 +6,7 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* 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 */
/* */
/* ************************************************************************** */

View File

@ -6,7 +6,7 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* 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;

View File

@ -6,7 +6,7 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* 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);
}
}

View File

@ -6,7 +6,7 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* 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);

View File

@ -6,7 +6,7 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* 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);