add contain_any and add must be registered for join

This commit is contained in:
kinou-p 2023-02-12 22:16:04 +01:00
parent e74938f481
commit e58d03ff34
7 changed files with 99 additions and 56 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/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\

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/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********************************* */

View File

@ -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

View File

@ -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
View 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--;
}

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/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);

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/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--;
}