fix mode (verbose operator) fix mode reply and error
This commit is contained in:
commit
a16ccf5611
@ -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/03/13 02:32:41 by apommier ### ########.fr */
|
/* Updated: 2023/03/13 09:50:10 by apommier ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
@ -194,6 +194,7 @@ void print_registered_msg(fdList &allFds, int userNbr);
|
|||||||
/* *******************************CMD UTILS********************************** */
|
/* *******************************CMD UTILS********************************** */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
void names_reply(fdList &allFds, channelData &chan, int fd, int userNbr);
|
||||||
void split(std::string const &str, const char delim, std::vector<std::string> &out);
|
void split(std::string const &str, const char delim, std::vector<std::string> &out);
|
||||||
void split_but_keep(std::string const &str, const char delim, std::vector<std::string> &out); //same as split but keep one delimeter
|
void split_but_keep(std::string const &str, const char delim, std::vector<std::string> &out); //same as split but keep one delimeter
|
||||||
|
|
||||||
@ -242,9 +243,12 @@ void parse_commands(std::string buffer, fdList &allFds, int userNbr);
|
|||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
//bool str_to_int(int &i, const std::string s);
|
//bool str_to_int(int &i, const std::string s);
|
||||||
|
int print_client_list(std::vector<clientData *> &list);
|
||||||
void ban_reply(channelData &chan, clientData &user);
|
void ban_reply(channelData &chan, clientData &user);
|
||||||
void chan_reply(channelData &chan, clientData &user);
|
void chan_reply(channelData &chan, clientData &user);
|
||||||
void user_reply(clientData &user);
|
void user_reply(clientData &user);
|
||||||
|
void chan_mode_reply(fdList &allFds, channelData &chan, int userNbr, std::string mode, int sign);
|
||||||
|
void user_mode_reply(fdList &allFds, clientData &user, int userNbr, std::string mode);
|
||||||
int search_and_erase(std::string &str, std::string toFind);
|
int search_and_erase(std::string &str, std::string toFind);
|
||||||
bool str_to_int(int &i, const std::string s);
|
bool str_to_int(int &i, const std::string s);
|
||||||
std::string int_to_str(int i);
|
std::string int_to_str(int i);
|
||||||
|
|||||||
@ -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/03/12 21:50:58 by apommier ### ########.fr */
|
/* Updated: 2023/03/13 08:56:33 by apommier ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
@ -94,23 +94,23 @@ void join_or_create(std::string buffer, fdList &allFds, int userNbr)
|
|||||||
else //chan doesn't exist yet
|
else //chan doesn't exist yet
|
||||||
{
|
{
|
||||||
//std::cout << "new chan\n";
|
//std::cout << "new chan\n";
|
||||||
channelData new_chan;
|
channelData tmp_chan;
|
||||||
|
allFds.channelList.push_back(tmp_chan);
|
||||||
|
channelData &new_chan = allFds.channelList[allFds.channelList.size() - 1];
|
||||||
if (splitBuff[1][0] != '#' && splitBuff[1][0] != '&')
|
if (splitBuff[1][0] != '#' && splitBuff[1][0] != '&')
|
||||||
cmd_error(allFds, allFds.userData[userNbr].fd, "476 " + allFds.userData[userNbr].nickname + " " + splitBuff[1] + " :Bad Channel Mask\r\n");
|
cmd_error(allFds, allFds.userData[userNbr].fd, "476 " + allFds.userData[userNbr].nickname + " " + splitBuff[1] + " :Bad Channel Mask\r\n");
|
||||||
new_chan.name = splitBuff[1];
|
|
||||||
//new_chan.nbrUser = 1;
|
//new_chan.nbrUser = 1;
|
||||||
|
|
||||||
|
new_chan.name = splitBuff[1];
|
||||||
new_chan.opList.push_back(&allFds.userData[userNbr]);
|
new_chan.opList.push_back(&allFds.userData[userNbr]);
|
||||||
new_chan.userList.push_back(&allFds.userData[userNbr]);
|
new_chan.userList.push_back(&allFds.userData[userNbr]);
|
||||||
joined_chan = new_chan;
|
//new_chan.List.push_back(&allFds.userData[userNbr]);
|
||||||
allFds.channelList.push_back(new_chan);
|
|
||||||
allFds.userData[userNbr].joinedChan.push_back(&allFds.channelList.back());//add chan in user data
|
allFds.userData[userNbr].joinedChan.push_back(&allFds.channelList.back());//add chan in user data
|
||||||
|
joined_chan = allFds.channelList[allFds.channelList.size() - 1];
|
||||||
}
|
}
|
||||||
// if (chanNbr == -1)
|
|
||||||
// {
|
|
||||||
// chanNbr =
|
|
||||||
// find_channel(allFds, splitBuff[1])
|
|
||||||
// }
|
|
||||||
|
|
||||||
|
|
||||||
|
// :kinou3!kinou@172.17.0.1 JOIN :#test //done!
|
||||||
std::string fullMsg;
|
std::string fullMsg;
|
||||||
fullMsg = ":" + allFds.userData[userNbr].nickname + "!" + allFds.userData[userNbr].userName + "@" + allFds.userData[userNbr].ip + " JOIN :" + joined_chan.name + "\r\n";
|
fullMsg = ":" + allFds.userData[userNbr].nickname + "!" + allFds.userData[userNbr].userName + "@" + allFds.userData[userNbr].ip + " JOIN :" + joined_chan.name + "\r\n";
|
||||||
for (size_t i = 0; i < joined_chan.userList.size(); i++)
|
for (size_t i = 0; i < joined_chan.userList.size(); i++)
|
||||||
@ -118,7 +118,10 @@ void join_or_create(std::string buffer, fdList &allFds, int userNbr)
|
|||||||
send(joined_chan.userList[i]->fd, fullMsg.c_str(), fullMsg.size(), 0);
|
send(joined_chan.userList[i]->fd, fullMsg.c_str(), fullMsg.size(), 0);
|
||||||
//std::cout << "loop here\n";
|
//std::cout << "loop here\n";
|
||||||
}
|
}
|
||||||
|
std::cout << "size uselist=" << joined_chan.userList.size() << std::endl;
|
||||||
|
names_reply(allFds, joined_chan, allFds.userData[userNbr].fd, userNbr);
|
||||||
|
// :irc.local 353 kinou3 = #test :@kinou3
|
||||||
|
// :irc.local 366 kinou3 #test :End of /NAMES list.
|
||||||
if (chanNbr == -1)
|
if (chanNbr == -1)
|
||||||
chanNbr = find_channel(allFds, splitBuff[1]);
|
chanNbr = find_channel(allFds, splitBuff[1]);
|
||||||
if (!allFds.channelList[chanNbr].topic.empty())
|
if (!allFds.channelList[chanNbr].topic.empty())
|
||||||
|
|||||||
@ -6,48 +6,78 @@
|
|||||||
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2023/02/11 19:19:30 by apommier #+# #+# */
|
/* Created: 2023/02/11 19:19:30 by apommier #+# #+# */
|
||||||
/* Updated: 2023/03/13 06:47:29 by apommier ### ########.fr */
|
/* Updated: 2023/03/13 10:37:01 by apommier ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
#include "../../../includes/ft_irc.hpp"
|
#include "../../../includes/ft_irc.hpp"
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
|
|
||||||
|
//:kinou3!kinou@172.17.0.1 MODE #test +o :kinou1
|
||||||
|
//:kinou3!kinou@172.17.0.1 MODE #test :+p
|
||||||
|
//kinou3 = baseop
|
||||||
|
//kinou1 = newOP
|
||||||
|
|
||||||
void chan_opt_o(fdList &allFds, int userNbr, std::vector<std::string> opt, int chanNbr, bool sign)
|
void chan_opt_o(fdList &allFds, int userNbr, std::vector<std::string> opt, int chanNbr, bool sign)
|
||||||
{
|
{
|
||||||
(void)allFds;
|
|
||||||
(void)userNbr;
|
|
||||||
(void)chanNbr;
|
(void)chanNbr;
|
||||||
|
int pos;
|
||||||
|
|
||||||
if (opt.size() != 4)
|
if (opt.size() < 4)
|
||||||
{
|
{
|
||||||
std::cout << "ERR_NEEDMOREPARAMS" << std::endl;
|
//std::cout << "ERR_NEEDMOREPARAMS" << std::endl;
|
||||||
|
cmd_error(allFds, allFds.userData[userNbr].fd, "461 " + allFds.userData[userNbr].nickname + " MODE " + opt[0] + " :Not enough parameters\r\n");
|
||||||
return ;
|
return ;
|
||||||
}
|
}
|
||||||
if ((find_user(allFds, opt[3]) == -1))
|
if ((find_user(allFds, opt[3]) == -1))
|
||||||
{
|
{
|
||||||
std::cout << "User :" << opt[3] << " not found" << std::endl;
|
//std::cout << "User :" << opt[3] << " not found" << std::endl;
|
||||||
cmd_error(allFds, allFds.userData[userNbr].fd, "401 *" + opt[1] + " :No such nick/channel\n");
|
cmd_error(allFds, allFds.userData[userNbr].fd, "401 " + allFds.userData[userNbr].nickname + " MODE " + opt[1] + " :No such nick\r\n");
|
||||||
return ;
|
return ;
|
||||||
}
|
}
|
||||||
|
|
||||||
//A voir
|
//A voir
|
||||||
if (allFds.userData[userNbr].mode.o == true && sign == true)
|
pos = find_client_list(allFds.channelList[chanNbr].opList, &allFds.userData[userNbr]) != -1;
|
||||||
allFds.userData[find_user(allFds, opt[3])].mode.o = (sign = true) ? true : false;
|
if (pos == -1 && !allFds.userData[userNbr].op)
|
||||||
|
{
|
||||||
|
cmd_error(allFds, allFds.userData[userNbr].fd, "482 " + allFds.userData[userNbr].nickname + " MODE " + opt[1] + " :You're not channel operator\r\n");
|
||||||
|
return ;
|
||||||
|
}
|
||||||
|
if (sign == false)
|
||||||
|
allFds.channelList[chanNbr].opList.erase(allFds.channelList[chanNbr].opList.begin() + pos);
|
||||||
|
else
|
||||||
|
allFds.channelList[chanNbr].opList.push_back(&allFds.userData[userNbr]);
|
||||||
|
chan_mode_reply(allFds, allFds.channelList[chanNbr], userNbr, "o", sign);
|
||||||
|
//retour mode chan
|
||||||
|
return ;
|
||||||
|
|
||||||
std::cout << "-------> " << opt[3] << std::endl;
|
// if (allFds.userData[userNbr].mode.o == true && sign == true)
|
||||||
|
// allFds.userData[find_user(allFds, opt[3])].mode.o = (sign = true) ? true : false;
|
||||||
|
|
||||||
|
// std::cout << "-------> " << opt[3] << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
void chan_opt_k(fdList &allFds, std::vector<std::string> opt, int chanNbr, bool sign)
|
void chan_opt_k(fdList &allFds, int userNbr, std::vector<std::string> opt, int chanNbr, bool sign)
|
||||||
{
|
{
|
||||||
if (opt.size() != 4)
|
if (find_client_list(allFds.channelList[chanNbr].opList, &allFds.userData[userNbr]) == -1 && !allFds.userData[userNbr].op)
|
||||||
{
|
{
|
||||||
std::cout << "ERR_NEEDMOREPARAMS" << std::endl;
|
cmd_error(allFds, allFds.userData[userNbr].fd, "482 " + allFds.userData[userNbr].nickname + " MODE " + opt[1] + " :You're not channel operator\n");
|
||||||
std::cout << "how to use it :/MODE <channel >+k <password>" << std::endl;
|
return ;
|
||||||
|
}
|
||||||
|
if (opt.size() < 4)
|
||||||
|
{
|
||||||
|
//std::cout << "ERR_NEEDMOREPARAMS" << std::endl;
|
||||||
|
//std::cout << "how to use it :/MODE <channel >+k <password>" << std::endl;
|
||||||
|
cmd_error(allFds, allFds.userData[userNbr].fd, "461 " + allFds.userData[userNbr].nickname + " MODE " + opt[0] + " :Not enough parameters\n");
|
||||||
return ;
|
return ;
|
||||||
}
|
}
|
||||||
if (sign == true)
|
if (sign == true)
|
||||||
|
{
|
||||||
|
allFds.channelList[chanNbr].mode.k = 1;
|
||||||
allFds.channelList[chanNbr].password = opt[3];
|
allFds.channelList[chanNbr].password = opt[3];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
allFds.channelList[chanNbr].mode.k = 0;
|
||||||
|
chan_mode_reply(allFds, allFds.channelList[chanNbr], userNbr, "k", sign);
|
||||||
}
|
}
|
||||||
|
|
||||||
void chan_opt_v(fdList &allFds, int userNbr, std::vector<std::string> opt, int chanNbr, bool sign)
|
void chan_opt_v(fdList &allFds, int userNbr, std::vector<std::string> opt, int chanNbr, bool sign)
|
||||||
@ -56,17 +86,23 @@ void chan_opt_v(fdList &allFds, int userNbr, std::vector<std::string> opt, int c
|
|||||||
(void)chanNbr;
|
(void)chanNbr;
|
||||||
(void)sign;
|
(void)sign;
|
||||||
|
|
||||||
|
if (find_client_list(allFds.channelList[chanNbr].opList, &allFds.userData[userNbr]) < 0)
|
||||||
|
{
|
||||||
|
cmd_error(allFds, allFds.userData[userNbr].fd, "482 " + allFds.userData[userNbr].nickname + " MODE " + opt[1] + " :You're not channel operator\n");
|
||||||
|
return ;
|
||||||
|
}
|
||||||
if (opt.size() < 4)
|
if (opt.size() < 4)
|
||||||
{
|
{
|
||||||
std::cout << "ERR_NEEDMOREPARAMS" << std::endl;
|
std::cout << "ERR_NEEDMOREPARAMS" << std::endl;
|
||||||
std::cout << "how to use it :/MODE <channel> +/-v <user>" << std::endl;
|
std::cout << "how to use it :/MODE <channel> +/-v <user>" << std::endl;
|
||||||
|
cmd_error(allFds, allFds.userData[userNbr].fd, "461 " + allFds.userData[userNbr].nickname + " MODE " + opt[0] + " :Not enough parameters\n");
|
||||||
return ;
|
return ;
|
||||||
}
|
}
|
||||||
|
|
||||||
int target = find_user(allFds, opt[3]);
|
int target = find_user(allFds, opt[3]);
|
||||||
if (target == -1)
|
if (target == -1)
|
||||||
{
|
{
|
||||||
cmd_error(allFds, allFds.userData[userNbr].fd, "401 *" + opt[3] + " :No such nick/channel\n");
|
cmd_error(allFds, allFds.userData[userNbr].fd, "401 " + allFds.userData[userNbr].nickname + " MODE " + opt[3] + " :No such nick\n");
|
||||||
return ;
|
return ;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -75,42 +111,57 @@ void chan_opt_v(fdList &allFds, int userNbr, std::vector<std::string> opt, int c
|
|||||||
allFds.channelList[chanNbr].verboseList.push_back(&allFds.userData[target]);
|
allFds.channelList[chanNbr].verboseList.push_back(&allFds.userData[target]);
|
||||||
if (sign == false && pos != -1)
|
if (sign == false && pos != -1)
|
||||||
allFds.channelList[chanNbr].verboseList.erase(allFds.channelList[chanNbr].verboseList.begin() + pos);
|
allFds.channelList[chanNbr].verboseList.erase(allFds.channelList[chanNbr].verboseList.begin() + pos);
|
||||||
|
chan_mode_reply(allFds, allFds.channelList[chanNbr], userNbr, "v", sign);
|
||||||
}
|
}
|
||||||
|
|
||||||
void chan_opt_b(fdList &allFds, int userNbr, std::vector<std::string> opt, int chanNbr, bool sign)
|
void chan_opt_b(fdList &allFds, int userNbr, std::vector<std::string> opt, int chanNbr, bool sign)
|
||||||
{
|
{
|
||||||
std::vector<clientData *> ban(allFds.channelList[chanNbr].banList);
|
std::vector<clientData *> ban(allFds.channelList[chanNbr].banList);
|
||||||
(void)userNbr;
|
std::vector<std::string> name;
|
||||||
(void)opt;
|
|
||||||
(void)chanNbr;
|
|
||||||
(void)sign;
|
|
||||||
(void)ban;
|
|
||||||
int pos;
|
int pos;
|
||||||
|
int target_in_client;
|
||||||
|
int target_in_ban;
|
||||||
|
|
||||||
if (opt.size() == 3 && sign == true)
|
if (opt.size() == 3 && sign == true)
|
||||||
{
|
{
|
||||||
if (ban.empty() == true)
|
// if (ban.empty() == true)
|
||||||
{
|
// {
|
||||||
std::cout << "Nobody was banned on this channel" << std::endl;
|
// std::cout << "Nobody was banned on this channel" << std::endl;
|
||||||
return ;
|
// return ;
|
||||||
}
|
// }
|
||||||
for (long unsigned int i = 0; i < ban.size(); i++)
|
// for (long unsigned int i = 0; i < ban.size(); ++i)
|
||||||
{
|
// {
|
||||||
std::cout << ban[i]->nickname << std::endl;
|
// std::cout << ban[i]->nickname << std::endl;
|
||||||
}
|
// }
|
||||||
ban_reply(allFds.channelList[chanNbr], allFds.userData[userNbr]);
|
ban_reply(allFds.channelList[chanNbr], allFds.userData[userNbr]);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (opt.size() >= 4)
|
if (opt.size() >= 4)
|
||||||
{
|
{
|
||||||
int target_in_client = find_user(allFds, opt[3]);
|
if (find_client_list(allFds.channelList[chanNbr].opList, &allFds.userData[userNbr]) < 0)
|
||||||
|
{
|
||||||
|
cmd_error(allFds, allFds.userData[userNbr].fd, "482 " + allFds.userData[userNbr].nickname + " MODE " + opt[1] + " :You're not channel operator\n");
|
||||||
|
return ;
|
||||||
|
}
|
||||||
|
split(opt[3], ',', name);
|
||||||
|
|
||||||
|
for (size_t i = 0; i < name.size(); i++)
|
||||||
|
{
|
||||||
|
// std::cout << "===============>" << i << std::endl;
|
||||||
|
// std::cout << "===============>" << opt.size() << std::endl;
|
||||||
|
target_in_client = find_user(allFds, name[i]);
|
||||||
if (target_in_client == -1)
|
if (target_in_client == -1)
|
||||||
{
|
{
|
||||||
std::cout << "No user found" << std::endl;
|
std::cout << "No user found" << std::endl;
|
||||||
return ;
|
cmd_error(allFds, allFds.userData[userNbr].fd, "401 " + allFds.userData[userNbr].nickname + " MODE " + name[i] + " :No such nick\n");
|
||||||
|
// return ;
|
||||||
}
|
}
|
||||||
int target_in_ban = find_client_list(allFds.channelList[chanNbr].banList, &allFds.userData[target_in_client]);
|
|
||||||
|
target_in_ban = find_client_list(allFds.channelList[chanNbr].banList, &allFds.userData[target_in_client]);
|
||||||
if (sign == true && target_in_ban == -1)
|
if (sign == true && target_in_ban == -1)
|
||||||
|
{
|
||||||
|
if (find_client_list(allFds.channelList[chanNbr].opList, &allFds.userData[target_in_client]))
|
||||||
{
|
{
|
||||||
allFds.channelList[chanNbr].banList.push_back(&allFds.userData[target_in_client]);
|
allFds.channelList[chanNbr].banList.push_back(&allFds.userData[target_in_client]);
|
||||||
std::cout << "call kick\n";
|
std::cout << "call kick\n";
|
||||||
@ -120,12 +171,19 @@ void chan_opt_b(fdList &allFds, int userNbr, std::vector<std::string> opt, int c
|
|||||||
if ((pos = find_client_list(allFds.channelList[chanNbr].opList, &allFds.userData[target_in_client])) != -1)
|
if ((pos = find_client_list(allFds.channelList[chanNbr].opList, &allFds.userData[target_in_client])) != -1)
|
||||||
allFds.channelList[chanNbr].opList.erase(allFds.channelList[chanNbr].opList.begin() + pos);
|
allFds.channelList[chanNbr].opList.erase(allFds.channelList[chanNbr].opList.begin() + pos);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
cmd_error(allFds, allFds.userData[userNbr].fd, "482 " + allFds.userData[userNbr].nickname + " MODE " + opt[0] + " :You're not channel operator\n");
|
||||||
|
}
|
||||||
if (sign == false && target_in_ban != -1)
|
if (sign == false && target_in_ban != -1)
|
||||||
{
|
{
|
||||||
std::cout <<"target in bam == "<< allFds.channelList[chanNbr].banList[target_in_ban]->nickname << std::endl;
|
std::cout <<"target in bam == "<< allFds.channelList[chanNbr].banList[target_in_ban]->nickname << std::endl;
|
||||||
allFds.channelList[chanNbr].banList.erase(allFds.channelList[chanNbr].banList.begin() + (target_in_ban));
|
allFds.channelList[chanNbr].banList.erase(allFds.channelList[chanNbr].banList.begin() + (target_in_ban));
|
||||||
}
|
}
|
||||||
|
std::cout << "counter" << std::endl;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
chan_mode_reply(allFds, allFds.channelList[chanNbr], userNbr, "b", sign);
|
||||||
|
return ;
|
||||||
}
|
}
|
||||||
|
|
||||||
void do_chan_opt(fdList &allFds, int userNbr, std::vector<std::string> opt, int chanNbr /*, channel (string or direct reference or pointer but no copy)*/)
|
void do_chan_opt(fdList &allFds, int userNbr, std::vector<std::string> opt, int chanNbr /*, channel (string or direct reference or pointer but no copy)*/)
|
||||||
@ -136,6 +194,7 @@ void do_chan_opt(fdList &allFds, int userNbr, std::vector<std::string> opt, int
|
|||||||
|
|
||||||
// if (allFds.userData[userNbr].mode.o == false)
|
// if (allFds.userData[userNbr].mode.o == false)
|
||||||
// {
|
// {
|
||||||
|
// cmd_error(allFds, allFds.userData[userNbr].fd, "482 " + allFds.userData[userNbr].nickname + opt[1] + " :You're not channel operator\n");
|
||||||
// return ;
|
// return ;
|
||||||
// }
|
// }
|
||||||
if (opt[2][0] == '-')
|
if (opt[2][0] == '-')
|
||||||
@ -144,29 +203,37 @@ void do_chan_opt(fdList &allFds, int userNbr, std::vector<std::string> opt, int
|
|||||||
{
|
{
|
||||||
switch (opt[2][i])
|
switch (opt[2][i])
|
||||||
{
|
{
|
||||||
case 'o': chan_opt_o(allFds, userNbr, opt, chanNbr, sign); //std::cout << "launching option: " << opt[2][i] << std::endl;
|
case 'o': chan_opt_o(allFds, userNbr, opt, chanNbr, sign);//std::cout << "launching option: " << opt[2][i] << std::endl;
|
||||||
|
//chan_mode_reply(allFds, allFds.channelList[chanNbr], userNbr, "o", sign);
|
||||||
break ;
|
break ;
|
||||||
case 'p': allFds.channelList[chanNbr].mode.p = (sign == true) ? true : false;
|
case 'p': allFds.channelList[chanNbr].mode.p = (sign == true) ? true : false;
|
||||||
|
chan_mode_reply(allFds, allFds.channelList[chanNbr], userNbr, "p", sign);
|
||||||
break ;
|
break ;
|
||||||
case 's': allFds.channelList[chanNbr].mode.s = (sign == true) ? true : false;
|
case 's': allFds.channelList[chanNbr].mode.s = (sign == true) ? true : false;
|
||||||
|
chan_mode_reply(allFds, allFds.channelList[chanNbr], userNbr, "s", sign);
|
||||||
break ;
|
break ;
|
||||||
case 'i': allFds.channelList[chanNbr].mode.i = (sign == true) ? true : false;
|
case 'i': allFds.channelList[chanNbr].mode.i = (sign == true) ? true : false;
|
||||||
|
chan_mode_reply(allFds, allFds.channelList[chanNbr], userNbr, "i", sign);
|
||||||
break ;
|
break ;
|
||||||
case 't': allFds.channelList[chanNbr].mode.t = (sign == true) ? true : false;
|
case 't': allFds.channelList[chanNbr].mode.t = (sign == true) ? true : false;
|
||||||
|
chan_mode_reply(allFds, allFds.channelList[chanNbr], userNbr, "t", sign);
|
||||||
break ;
|
break ;
|
||||||
case 'n': allFds.channelList[chanNbr].mode.n = (sign == true) ? true : false;
|
case 'n': allFds.channelList[chanNbr].mode.n = (sign == true) ? true : false;
|
||||||
|
chan_mode_reply(allFds, allFds.channelList[chanNbr], userNbr, "n", sign);
|
||||||
break ;
|
break ;
|
||||||
case 'm': allFds.channelList[chanNbr].mode.m = (sign == true) ? true : false;
|
case 'm': allFds.channelList[chanNbr].mode.m = (sign == true) ? true : false;
|
||||||
|
chan_mode_reply(allFds, allFds.channelList[chanNbr], userNbr, "m", sign);
|
||||||
break ;
|
break ;
|
||||||
case 'l':
|
case 'l':
|
||||||
if (sign == true)
|
if (sign == true)
|
||||||
str_to_int(allFds.channelList[chanNbr].maxUser, opt[3]);
|
str_to_int(allFds.channelList[chanNbr].maxUser, opt[3]);
|
||||||
|
chan_mode_reply(allFds, allFds.channelList[chanNbr], userNbr, "l", sign);
|
||||||
break ;
|
break ;
|
||||||
case 'b': chan_opt_b(allFds, userNbr, opt, chanNbr, sign);
|
case 'b': chan_opt_b(allFds, userNbr, opt, chanNbr, sign);
|
||||||
break ;
|
break ;
|
||||||
case 'v': chan_opt_v(allFds, userNbr, opt, chanNbr, sign);
|
case 'v': chan_opt_v(allFds, userNbr, opt, chanNbr, sign);
|
||||||
break ;
|
break ;
|
||||||
case 'k': chan_opt_k(allFds, opt, chanNbr, sign);
|
case 'k': chan_opt_k(allFds, userNbr, opt, chanNbr, sign);
|
||||||
break ;
|
break ;
|
||||||
default : std::cout << "Not launching option" << std::endl;
|
default : std::cout << "Not launching option" << std::endl;
|
||||||
break ;
|
break ;
|
||||||
@ -181,15 +248,12 @@ void do_chan_opt(fdList &allFds, int userNbr, std::vector<std::string> opt, int
|
|||||||
|
|
||||||
void do_user_opt(fdList &allFds, int userNbr, std::vector<std::string> opt, int new_target)
|
void do_user_opt(fdList &allFds, int userNbr, std::vector<std::string> opt, int new_target)
|
||||||
{
|
{
|
||||||
(void)allFds;
|
|
||||||
(void)userNbr;
|
|
||||||
(void)new_target;
|
|
||||||
//char opts[4] = {'i', 's', 'w', 'o'};
|
|
||||||
bool sign = true;
|
bool sign = true;
|
||||||
|
|
||||||
if (allFds.userData[userNbr].nickname != opt[1])
|
if (allFds.userData[userNbr].nickname != opt[1])
|
||||||
{
|
{
|
||||||
std::cout << "not the same user ! don't try to change someone else MODE you stupid bitch\n";
|
std::cout << "not the same user ! don't try to change someone else MODE you stupid bitch\n";
|
||||||
cmd_error(allFds, allFds.userData[userNbr].fd, "502 *" + opt[1] + " :Cant change mode for other users\n");
|
cmd_error(allFds, allFds.userData[userNbr].fd, "502 " + allFds.userData[userNbr].nickname + " MODE " + opt[1] + " :Cant change mode for other users\r\n");
|
||||||
return ;
|
return ;
|
||||||
}
|
}
|
||||||
if (opt[2][0] == '-')
|
if (opt[2][0] == '-')
|
||||||
@ -202,6 +266,7 @@ void do_user_opt(fdList &allFds, int userNbr, std::vector<std::string> opt, int
|
|||||||
switch(opt[2][i])
|
switch(opt[2][i])
|
||||||
{
|
{
|
||||||
case 'i': allFds.userData[new_target].mode.i = (sign == true) ? true : false;
|
case 'i': allFds.userData[new_target].mode.i = (sign == true) ? true : false;
|
||||||
|
user_mode_reply(allFds, allFds.userData[new_target]/*clientData &user*/, userNbr, "i");
|
||||||
break ;
|
break ;
|
||||||
case 's': allFds.userData[new_target].mode.s = (sign == true) ? true : false;
|
case 's': allFds.userData[new_target].mode.s = (sign == true) ? true : false;
|
||||||
break ;
|
break ;
|
||||||
@ -212,7 +277,7 @@ void do_user_opt(fdList &allFds, int userNbr, std::vector<std::string> opt, int
|
|||||||
return ;
|
return ;
|
||||||
// if (allFds.userData[userNbr].mode.o == false)
|
// if (allFds.userData[userNbr].mode.o == false)
|
||||||
// {
|
// {
|
||||||
// cmd_error(allFds, allFds.userData[userNbr].fd, "482 *" + opt[1] + " :You're not channel operator\n");
|
// cmd_error(allFds, allFds.userData[userNbr].fd, "482 " + allFds.userData[userNbr].nickname + opt[1] + " :You're not channel operator\n");
|
||||||
// return ;
|
// return ;
|
||||||
// }
|
// }
|
||||||
allFds.userData[new_target].mode.o = (sign == true) ? true : false;
|
allFds.userData[new_target].mode.o = (sign == true) ? true : false;
|
||||||
@ -230,10 +295,11 @@ void MODE(std::string buffer, fdList &allFds, int userNbr)
|
|||||||
(void)userNbr;
|
(void)userNbr;
|
||||||
std::vector<std::string> splitBuff;
|
std::vector<std::string> splitBuff;
|
||||||
int pos;
|
int pos;
|
||||||
|
|
||||||
split(buffer, ' ', splitBuff);
|
split(buffer, ' ', splitBuff);
|
||||||
if (splitBuff.size() < 2)
|
if (splitBuff.size() < 2)
|
||||||
{
|
{
|
||||||
cmd_error(allFds, allFds.userData[userNbr].fd, "461 *" + splitBuff[0] + " :Not enough parameters\n");
|
cmd_error(allFds, allFds.userData[userNbr].fd, "461 " + allFds.userData[userNbr].nickname + " MODE " + splitBuff[0] + " :Not enough parameters\n");
|
||||||
return ;
|
return ;
|
||||||
}
|
}
|
||||||
if (splitBuff[1][0] == '#' || splitBuff[1][0] == '&') //splitbuff[1] always equal to <channel> or <nickname>
|
if (splitBuff[1][0] == '#' || splitBuff[1][0] == '&') //splitbuff[1] always equal to <channel> or <nickname>
|
||||||
@ -241,7 +307,7 @@ void MODE(std::string buffer, fdList &allFds, int userNbr)
|
|||||||
if ((pos = find_channel(allFds, splitBuff[1])) == -1) //if true chan doesn't exist
|
if ((pos = find_channel(allFds, splitBuff[1])) == -1) //if true chan doesn't exist
|
||||||
{
|
{
|
||||||
std::cout << splitBuff[1] << ": No such channel" << std::endl;
|
std::cout << splitBuff[1] << ": No such channel" << std::endl;
|
||||||
cmd_error(allFds, allFds.userData[userNbr].fd, "403 *" + splitBuff[1] + " :No such channel\n");
|
cmd_error(allFds, allFds.userData[userNbr].fd, "403 " + allFds.userData[userNbr].nickname + " MODE " + splitBuff[1] + " :No such channel\n");
|
||||||
return ;
|
return ;
|
||||||
}//else
|
}//else
|
||||||
//verify_option(allFds, str, i); //needed?
|
//verify_option(allFds, str, i); //needed?
|
||||||
@ -253,11 +319,17 @@ void MODE(std::string buffer, fdList &allFds, int userNbr)
|
|||||||
// std::cout << "splitbuff[2] after = " << splitBuff[2] << std::endl;
|
// std::cout << "splitbuff[2] after = " << splitBuff[2] << std::endl;
|
||||||
if ((splitBuff[2].size() < 2) || (splitBuff[2][0] != '-' && splitBuff[2][0] != '+'))
|
if ((splitBuff[2].size() < 2) || (splitBuff[2][0] != '-' && splitBuff[2][0] != '+'))
|
||||||
{
|
{
|
||||||
|
if (splitBuff[2].size() > 2)
|
||||||
|
{
|
||||||
|
if (splitBuff[2] == "b")
|
||||||
|
ban_reply(allFds.channelList[pos], allFds.userData[userNbr]);
|
||||||
|
}
|
||||||
std::cout << "Bad params" << std::endl;
|
std::cout << "Bad params" << std::endl;
|
||||||
return ;
|
return ;
|
||||||
}
|
}
|
||||||
do_chan_opt(allFds, userNbr, splitBuff, pos);
|
do_chan_opt(allFds, userNbr, splitBuff, pos);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
chan_reply(allFds.channelList[pos], allFds.userData[userNbr]);
|
chan_reply(allFds.channelList[pos], allFds.userData[userNbr]);
|
||||||
//do_option one by one here (do_chan_opt)?
|
//do_option one by one here (do_chan_opt)?
|
||||||
return ;
|
return ;
|
||||||
@ -266,7 +338,7 @@ void MODE(std::string buffer, fdList &allFds, int userNbr)
|
|||||||
else if ((pos = find_user(allFds, splitBuff[1])) == -1)
|
else if ((pos = find_user(allFds, splitBuff[1])) == -1)
|
||||||
{
|
{
|
||||||
std::cout << "user doesn't exist" << std::endl;
|
std::cout << "user doesn't exist" << std::endl;
|
||||||
cmd_error(allFds, allFds.userData[userNbr].fd, "401 *" + splitBuff[1] + " :No such nick\n");
|
cmd_error(allFds, allFds.userData[userNbr].fd, "401 " + allFds.userData[userNbr].nickname + " MODE " + splitBuff[1] + " :No such nick\n");
|
||||||
return ;
|
return ;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -276,11 +348,12 @@ void MODE(std::string buffer, fdList &allFds, int userNbr)
|
|||||||
search_and_erase(splitBuff[2], "iswo");
|
search_and_erase(splitBuff[2], "iswo");
|
||||||
if ((splitBuff[2].size() < 2) && (splitBuff[2][0] != '-' || splitBuff[2][0] != '+'))
|
if ((splitBuff[2].size() < 2) && (splitBuff[2][0] != '-' || splitBuff[2][0] != '+'))
|
||||||
{
|
{
|
||||||
cmd_error(allFds, allFds.userData[userNbr].fd, "461 *" + splitBuff[0] + " :Not enough parameters\n");
|
cmd_error(allFds, allFds.userData[userNbr].fd, "461 " + allFds.userData[userNbr].nickname + " MODE " + splitBuff[0] + " :Not enough parameters\n");
|
||||||
return ;
|
return ;
|
||||||
}
|
}
|
||||||
do_user_opt(allFds, userNbr, splitBuff, pos);
|
do_user_opt(allFds, userNbr, splitBuff, pos);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
user_reply(allFds.userData[userNbr]);
|
user_reply(allFds.userData[userNbr]);
|
||||||
}
|
}
|
||||||
//do_option one by one here (do_user_opt)?
|
//do_option one by one here (do_user_opt)?
|
||||||
|
|||||||
@ -6,7 +6,7 @@
|
|||||||
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2023/03/09 00:13:32 by apommier #+# #+# */
|
/* Created: 2023/03/09 00:13:32 by apommier #+# #+# */
|
||||||
/* Updated: 2023/03/13 06:21:17 by apommier ### ########.fr */
|
/* Updated: 2023/03/13 10:23:05 by apommier ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
@ -22,7 +22,8 @@ void ban_reply(channelData &chan, clientData &user)
|
|||||||
fullReply = reply + chan.banList[i]->nickname + "!" + chan.banList[i]->userName + "@" + chan.banList[i]->hostName + "\r\n";
|
fullReply = reply + chan.banList[i]->nickname + "!" + chan.banList[i]->userName + "@" + chan.banList[i]->hostName + "\r\n";
|
||||||
send(user.fd, fullReply.c_str(), fullReply.size(), 0);
|
send(user.fd, fullReply.c_str(), fullReply.size(), 0);
|
||||||
}
|
}
|
||||||
endReply = ":irc.local 367 " + user.nickname + " " + chan.name + " :End of channel ban list\r\n";
|
//:irc.local 368 kinou3 #test :End of channel ban list
|
||||||
|
endReply = ":irc.local 368 " + user.nickname + " " + chan.name + " :End of channel ban list\r\n";
|
||||||
send(user.fd, endReply.c_str(), endReply.size(), 0);
|
send(user.fd, endReply.c_str(), endReply.size(), 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -32,7 +33,8 @@ void chan_reply(channelData &chan, clientData &user)
|
|||||||
(void) chan;
|
(void) chan;
|
||||||
//int mode;
|
//int mode;
|
||||||
//std::string reply = " +";
|
//std::string reply = " +";
|
||||||
std::string reply = ":irc.local 324 " + user.nickname + " " + chan.name + " +";
|
//:irc.local 324 kinou3 #test :+nt
|
||||||
|
std::string reply = ":irc.local 324 " + user.nickname + " " + chan.name + " :+";
|
||||||
if (chan.mode.p)
|
if (chan.mode.p)
|
||||||
reply += 'p';
|
reply += 'p';
|
||||||
if (chan.mode.s)
|
if (chan.mode.s)
|
||||||
@ -60,12 +62,65 @@ void chan_reply(channelData &chan, clientData &user)
|
|||||||
//return (reply);
|
//return (reply);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void chan_mode_reply(fdList &allFds, channelData &chan, int userNbr, std::string mode, int sign)
|
||||||
|
{
|
||||||
|
//userNbr = asking client
|
||||||
|
//client = changed mode client
|
||||||
|
|
||||||
|
//:kinou3!kinou@172.17.0.1 MODE #test +o :kinou1
|
||||||
|
//:kinou3!kinou@172.17.0.1 MODE #test :+p
|
||||||
|
//kinou3 = baseop
|
||||||
|
//kinou1 = newOP
|
||||||
|
|
||||||
|
|
||||||
|
std::string reply = ":" + allFds.userData[userNbr].nickname + "!" + allFds.userData[userNbr].userName
|
||||||
|
+ "@" + allFds.userData[userNbr].ip + " MODE " + chan.name;// + " :+" + mode + "\r\n";
|
||||||
|
//if (sign)
|
||||||
|
// reply += " +";
|
||||||
|
//else
|
||||||
|
// reply += " -";
|
||||||
|
if (sign)
|
||||||
|
{
|
||||||
|
reply += " +";
|
||||||
|
if (mode == "o")
|
||||||
|
reply += mode + " :" + chan.opList.back()->nickname;
|
||||||
|
else if (mode == "l")
|
||||||
|
reply += mode + " :" + int_to_str(chan.maxUser);
|
||||||
|
else if (mode == "b")
|
||||||
|
reply += mode + " :" + chan.banList.back()->nickname;
|
||||||
|
else if (mode == "v")
|
||||||
|
reply += mode + " :" + chan.verboseList.back()->nickname;
|
||||||
|
else if (mode == "k")
|
||||||
|
reply += mode + " :" + chan.password;
|
||||||
|
}
|
||||||
|
else if (mode == "o")
|
||||||
|
reply += " -" + mode + " :" + chan.verboseList.back()->nickname;
|
||||||
|
else if (mode == "b")
|
||||||
|
reply += " -" + mode + " :" + chan.verboseList.back()->nickname;
|
||||||
|
else if (mode == "v")
|
||||||
|
reply += " -" + mode + " :" + chan.verboseList.back()->nickname;
|
||||||
|
else if (sign)
|
||||||
|
reply += " :+" + mode;
|
||||||
|
else
|
||||||
|
reply += " :-" + mode;
|
||||||
|
reply += "\r\n";
|
||||||
|
std::cout << "reply=" << reply << std::endl;
|
||||||
|
for (size_t i = 0; i < chan.userList.size(); i++)
|
||||||
|
{
|
||||||
|
std::cout << "i=" << i << std::endl;
|
||||||
|
send(chan.userList[i]->fd, reply.c_str(), reply.size(), 0);
|
||||||
|
}
|
||||||
|
//send(allFds.userData[userNbr].fd, reply.c_str(), reply.size(), 0);
|
||||||
|
//void user_reply(clientData &user)
|
||||||
|
}
|
||||||
|
|
||||||
void user_mode_reply(fdList &allFds, clientData &user, int userNbr, std::string mode)
|
void user_mode_reply(fdList &allFds, clientData &user, int userNbr, std::string mode)
|
||||||
{
|
{
|
||||||
//userNbr = asking client
|
//userNbr = asking client
|
||||||
//client = changed mode client
|
//client = changed mode client
|
||||||
std::string reply = ":" + allFds.userData[userNbr].nickname + "!" + allFds.userData[userNbr].userName
|
std::string reply = ":" + allFds.userData[userNbr].nickname + "!" + allFds.userData[userNbr].userName
|
||||||
+ "@" + allFds.userData[userNbr].ip + " MODE " + user.nickname + " :+" + mode;
|
+ "@" + allFds.userData[userNbr].ip + " MODE " + user.nickname + " :+" + mode + "\r\n";
|
||||||
|
send(allFds.userData[userNbr].fd, reply.c_str(), reply.size(), 0);
|
||||||
//void user_reply(clientData &user)
|
//void user_reply(clientData &user)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -6,7 +6,7 @@
|
|||||||
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2023/02/16 18:14:15 by apommier #+# #+# */
|
/* Created: 2023/02/16 18:14:15 by apommier #+# #+# */
|
||||||
/* Updated: 2023/03/13 06:12:36 by apommier ### ########.fr */
|
/* Updated: 2023/03/13 10:24:43 by apommier ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
@ -19,18 +19,26 @@ void names_reply(fdList &allFds, channelData &chan, int fd, int userNbr)
|
|||||||
{
|
{
|
||||||
//:irc.local 353 kinou3 = #test :@kinou3
|
//:irc.local 353 kinou3 = #test :@kinou3
|
||||||
std::string msg;
|
std::string msg;
|
||||||
|
print_client_list(chan.opList);
|
||||||
|
print_client_list(chan.verboseList);
|
||||||
msg = "353 " + allFds.userData[userNbr].nickname + " = " + chan.name + " :";
|
msg = "353 " + allFds.userData[userNbr].nickname + " = " + chan.name + " :";
|
||||||
for (size_t i = 0; i < chan.userList.size(); i++)
|
for (size_t i = 0; i < chan.userList.size(); i++)
|
||||||
{
|
{
|
||||||
if (chan.userList[i]->mode.i && !is_in_same(allFds, userNbr, find_user(allFds, chan.userList[i]->nickname) && !allFds.userData[userNbr].op)/*user secret et pas meme chan*/)
|
if (chan.userList[i]->mode.i && !is_in_same(allFds, userNbr, find_user(allFds, chan.userList[i]->nickname) && !allFds.userData[userNbr].op)/*user secret et pas meme chan*/)
|
||||||
;
|
;
|
||||||
else if (find_client_list(chan.opList, chan.userList[i]) || allFds.userData[userNbr].op)//(chan.userList[i]->mode.o)//ischanop
|
else if (find_client_list(chan.opList, chan.userList[i]) != -1 || allFds.userData[userNbr].op)//(chan.userList[i]->mode.o)//ischanop
|
||||||
|
{
|
||||||
|
std::cout << "he is op!!!\n";
|
||||||
msg += "@" + chan.userList[i]->nickname + " ";
|
msg += "@" + chan.userList[i]->nickname + " ";
|
||||||
else if (find_client_list(chan.verboseList, chan.userList[i]))//(chan.userList[i]->mode.v)//verbose
|
}
|
||||||
msg += "=" + chan.userList[i]->nickname + " ";
|
else if (find_client_list(chan.verboseList, chan.userList[i]) != -1)//(chan.userList[i]->mode.v)//verbose
|
||||||
else
|
{
|
||||||
|
std::cout << "he is verbose???\n";
|
||||||
msg += "+" + chan.userList[i]->nickname + " ";
|
msg += "+" + chan.userList[i]->nickname + " ";
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
msg += /*"=" +*/ chan.userList[i]->nickname + " ";
|
||||||
|
}
|
||||||
msg += "\r\n";
|
msg += "\r\n";
|
||||||
std::cout << "name msg= " << msg;
|
std::cout << "name msg= " << msg;
|
||||||
cmd_reply(allFds, fd, msg);
|
cmd_reply(allFds, fd, msg);
|
||||||
|
|||||||
@ -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/03/13 02:33:08 by apommier ### ########.fr */
|
/* Updated: 2023/03/13 08:32:00 by apommier ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
@ -90,6 +90,17 @@ int find_client_list(std::vector<clientData *> &list, clientData *client)
|
|||||||
return (-1);
|
return (-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int print_client_list(std::vector<clientData *> &list)
|
||||||
|
{
|
||||||
|
int size = list.size();
|
||||||
|
std::cout << "=PRINT LIST=\n";
|
||||||
|
for (int i = 0; i < size; i++)
|
||||||
|
{
|
||||||
|
std::cout << i << "= " << list[i]->nickname << std::endl;
|
||||||
|
}
|
||||||
|
return (-1);
|
||||||
|
}
|
||||||
|
|
||||||
std::string int_to_str(int i)
|
std::string int_to_str(int i)
|
||||||
{
|
{
|
||||||
std::string s;
|
std::string s;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user