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> +#+ +:+ +#+ #
|
# 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
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> +#+ +:+ +#+ */
|
/* 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************************************ */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|||||||
@ -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");
|
||||||
|
|||||||
@ -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)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -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 ;
|
||||||
}
|
}
|
||||||
@ -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 ;
|
||||||
}
|
}
|
||||||
@ -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++;
|
||||||
|
|||||||
@ -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;
|
||||||
|
|||||||
@ -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);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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);
|
||||||
|
|||||||
@ -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);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user