add contain_any and add must be registered for join
This commit is contained in:
parent
e74938f481
commit
e58d03ff34
3
Makefile
3
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/12 15:44:05 by apommier ### ########.fr #
|
# Updated: 2023/02/12 20:53:25 by apommier ### ########.fr #
|
||||||
# #
|
# #
|
||||||
# **************************************************************************** #
|
# **************************************************************************** #
|
||||||
|
|
||||||
@ -18,6 +18,7 @@ SRCS := main.cpp\
|
|||||||
client_request.cpp\
|
client_request.cpp\
|
||||||
new_connection.cpp\
|
new_connection.cpp\
|
||||||
server_loop.cpp\
|
server_loop.cpp\
|
||||||
|
delete_user.cpp\
|
||||||
\
|
\
|
||||||
commands/cmd_utils.cpp\
|
commands/cmd_utils.cpp\
|
||||||
commands/parse_commands.cpp\
|
commands/parse_commands.cpp\
|
||||||
|
|||||||
@ -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/12 17:31:11 by apommier ### ########.fr */
|
/* Updated: 2023/02/12 21:10:18 by apommier ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
@ -106,6 +106,7 @@ struct clientData //each client have one
|
|||||||
struct channelData //each chan have one
|
struct channelData //each chan have one
|
||||||
{
|
{
|
||||||
std::string name;
|
std::string name;
|
||||||
|
std::string topic;
|
||||||
|
|
||||||
std::vector<clientData *> userList;
|
std::vector<clientData *> userList;
|
||||||
std::vector<clientData *> banList;
|
std::vector<clientData *> banList;
|
||||||
@ -140,6 +141,12 @@ struct fdList //&allFds in code | /!\ only one on the server | REFERENCE ONLY
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* ************************************************************************** */
|
||||||
|
/* *******************************DEL USER*********************************** */
|
||||||
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
void del_user_in_chan(clientData *user, channelData *chan);
|
||||||
|
void delete_user(fdList &allFds, int userNbr);
|
||||||
|
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
/* *********************************UTILS************************************ */
|
/* *********************************UTILS************************************ */
|
||||||
@ -149,8 +156,7 @@ void ft_putstr_fd(int fd, std::string str);
|
|||||||
void cmd_error(fdList &allFds, int userNbr, std::string error);
|
void cmd_error(fdList &allFds, int userNbr, std::string error);
|
||||||
void ft_error(std::string str);
|
void ft_error(std::string str);
|
||||||
void close_fd(int fd);
|
void close_fd(int fd);
|
||||||
void del_user_in_chan(clientData *user, channelData *chan);
|
int contain_any(std::string str, std::string toFind);
|
||||||
void delete_user(fdList &allFds, int userNbr);
|
|
||||||
|
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
/* *******************************AUTH UTILS********************************* */
|
/* *******************************AUTH UTILS********************************* */
|
||||||
|
|||||||
@ -6,7 +6,7 @@
|
|||||||
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2022/12/09 22:34:36 by apommier #+# #+# */
|
/* Created: 2022/12/09 22:34:36 by apommier #+# #+# */
|
||||||
/* Updated: 2023/02/11 23:53:10 by apommier ### ########.fr */
|
/* Updated: 2023/02/12 21:40:10 by apommier ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
@ -41,7 +41,7 @@ bool clientRequest(fdList &allFds, int userNbr)//,
|
|||||||
// std::cout << "buffer empty\n";
|
// std::cout << "buffer empty\n";
|
||||||
return (1);
|
return (1);
|
||||||
}
|
}
|
||||||
//std::cout << "BUFFER: ---" << buf << "---" << std::endl;
|
std::cout << "BUFFER: ---" << buf << "---" << std::endl;
|
||||||
|
|
||||||
//split with \n and while (tab de split) -> parsing
|
//split with \n and while (tab de split) -> parsing
|
||||||
|
|
||||||
|
|||||||
@ -6,7 +6,7 @@
|
|||||||
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2023/02/09 15:40:33 by apommier #+# #+# */
|
/* Created: 2023/02/09 15:40:33 by apommier #+# #+# */
|
||||||
/* Updated: 2023/02/12 17:33:31 by apommier ### ########.fr */
|
/* Updated: 2023/02/12 22:03:21 by apommier ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
@ -76,6 +76,12 @@ void JOIN(std::string buffer, fdList &allFds, int userNbr)
|
|||||||
std::cout << "==========join start========\n";
|
std::cout << "==========join start========\n";
|
||||||
|
|
||||||
std::cout << "userNbr= " << userNbr << std::endl;
|
std::cout << "userNbr= " << userNbr << std::endl;
|
||||||
|
if (!allFds.userData[userNbr].registered)
|
||||||
|
{
|
||||||
|
/*change error*/
|
||||||
|
cmd_error(allFds, allFds.userData[userNbr].fd, "451 * JOIN :You have not regestered\n"); //ERR_NEEDMOREPARAMS
|
||||||
|
return ;
|
||||||
|
}
|
||||||
split(buffer, ' ', splitBuff);
|
split(buffer, ' ', splitBuff);
|
||||||
if (splitBuff.size() < 2)
|
if (splitBuff.size() < 2)
|
||||||
{
|
{
|
||||||
@ -83,6 +89,12 @@ void JOIN(std::string buffer, fdList &allFds, int userNbr)
|
|||||||
cmd_error(allFds, allFds.userData[userNbr].fd, "461 * JOIN :Not enough parameters\n"); //ERR_NEEDMOREPARAMS
|
cmd_error(allFds, allFds.userData[userNbr].fd, "461 * JOIN :Not enough parameters\n"); //ERR_NEEDMOREPARAMS
|
||||||
return ;
|
return ;
|
||||||
}
|
}
|
||||||
|
//if (splitBuff[1].find(' ') != std::string::npos || splitBuff[1].find(7) != std::string::npos)
|
||||||
|
if (splitBuff[1][0] != '#' && splitBuff[1][0] != '&')
|
||||||
|
{
|
||||||
|
//leave_all(allFds, userNbr);
|
||||||
|
return ;
|
||||||
|
}
|
||||||
if (splitBuff[1] == "0")
|
if (splitBuff[1] == "0")
|
||||||
{
|
{
|
||||||
leave_all(allFds, userNbr);
|
leave_all(allFds, userNbr);
|
||||||
|
|||||||
38
srcs/delete_user.cpp
Normal file
38
srcs/delete_user.cpp
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
/* ************************************************************************** */
|
||||||
|
/* */
|
||||||
|
/* ::: :::::::: */
|
||||||
|
/* delete_user.cpp :+: :+: :+: */
|
||||||
|
/* +:+ +:+ +:+ */
|
||||||
|
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||||
|
/* +#+#+#+#+#+ +#+ */
|
||||||
|
/* Created: 2023/02/12 20:38:50 by apommier #+# #+# */
|
||||||
|
/* Updated: 2023/02/12 20:39:10 by apommier ### ########.fr */
|
||||||
|
/* */
|
||||||
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
#include "../includes/ft_irc.hpp"
|
||||||
|
|
||||||
|
void del_user_in_chan(clientData *user, channelData *chan)
|
||||||
|
{
|
||||||
|
size_t i;
|
||||||
|
for (i = 0; user != chan->userList[i]; i++)
|
||||||
|
;
|
||||||
|
chan->userList.erase(chan->userList.begin() + i);
|
||||||
|
}
|
||||||
|
|
||||||
|
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*/)
|
||||||
|
}
|
||||||
|
close(allFds.userData[userNbr].fd);
|
||||||
|
|
||||||
|
allFds.userData.erase(allFds.userData.begin() + userNbr);
|
||||||
|
allFds.userList.erase(allFds.userList.begin() + userNbr);
|
||||||
|
|
||||||
|
allFds.nbrUser--;
|
||||||
|
}
|
||||||
@ -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/12 14:17:36 by apommier ### ########.fr */
|
/* Updated: 2023/02/12 21:42:07 by apommier ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
@ -22,11 +22,11 @@ void new_connection(fdList &allFds)
|
|||||||
//std::cout << "in new adress " << &allFds << std::endl;
|
//std::cout << "in new adress " << &allFds << std::endl;
|
||||||
//std::cout << "new connection !" << std::endl;
|
//std::cout << "new connection !" << std::endl;
|
||||||
|
|
||||||
if (MAX_EVENTS == allFds.nbrUser)
|
// if (MAX_EVENTS == allFds.nbrUser)
|
||||||
{
|
// {
|
||||||
std::cout << "new connection refused, already full" << std::endl;
|
// std::cout << "new connection refused, already full" << std::endl;
|
||||||
return ;
|
// return ;
|
||||||
}
|
// }
|
||||||
|
|
||||||
//int newUserFd;
|
//int newUserFd;
|
||||||
//allFds.userList.push_back(newUserFd);
|
//allFds.userList.push_back(newUserFd);
|
||||||
|
|||||||
@ -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/12 14:31:10 by apommier ### ########.fr */
|
/* Updated: 2023/02/12 20:52:45 by apommier ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
@ -42,32 +42,18 @@ void cmd_error(fdList &allFds, int fd, std::string error)
|
|||||||
write(fd, error.c_str(), error.size());
|
write(fd, error.c_str(), error.size());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int contain_any(std::string str, std::string toFind)
|
||||||
|
{
|
||||||
|
for (int i = 0; toFind[i] != -1; i++)
|
||||||
|
{
|
||||||
|
if (str.find(toFind[i]) != std::string::npos)
|
||||||
|
return (1);
|
||||||
|
}
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
// void find_user_in_chan(fdList &allFds, channelData *chan)
|
// void find_user_in_chan(fdList &allFds, channelData *chan)
|
||||||
// {
|
// {
|
||||||
|
|
||||||
// }
|
// }
|
||||||
|
|
||||||
void del_user_in_chan(clientData *user, channelData *chan)
|
|
||||||
{
|
|
||||||
size_t i;
|
|
||||||
for (i = 0; user != chan->userList[i]; i++)
|
|
||||||
;
|
|
||||||
chan->userList.erase(chan->userList.begin() + i);
|
|
||||||
}
|
|
||||||
|
|
||||||
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*/)
|
|
||||||
}
|
|
||||||
close(allFds.userData[userNbr].fd);
|
|
||||||
|
|
||||||
allFds.userData.erase(allFds.userData.begin() + userNbr);
|
|
||||||
allFds.userList.erase(allFds.userList.begin() + userNbr);
|
|
||||||
|
|
||||||
allFds.nbrUser--;
|
|
||||||
}
|
|
||||||
Loading…
Reference in New Issue
Block a user