replace vector by list in allfds and add overload operator on list ([], +, -) add temp QUIT and SQUIT
This commit is contained in:
parent
9874d3d7e9
commit
be594154fc
2
Makefile
2
Makefile
@ -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
68
includes/accessList.hpp
Normal 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);
|
||||
}
|
||||
@ -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************************************ */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@ -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");
|
||||
|
||||
@ -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)
|
||||
{
|
||||
|
||||
@ -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 ;
|
||||
}
|
||||
@ -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 ;
|
||||
}
|
||||
@ -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 */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@ -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++;
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user