add PRIVMSG and add reserve for vector of user and chanlist because POINTER VALIDITY
This commit is contained in:
parent
15d3dd47fd
commit
2ae3844245
6
Makefile
6
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/10 08:18:36 by apommier ### ########.fr #
|
# Updated: 2023/02/11 10:41:15 by apommier ### ########.fr #
|
||||||
# #
|
# #
|
||||||
# **************************************************************************** #
|
# **************************************************************************** #
|
||||||
|
|
||||||
@ -18,13 +18,15 @@ SRCS := main.cpp\
|
|||||||
client_request.cpp\
|
client_request.cpp\
|
||||||
new_connection.cpp\
|
new_connection.cpp\
|
||||||
server_loop.cpp\
|
server_loop.cpp\
|
||||||
|
commands/cmd_utils.cpp\
|
||||||
commands/parse_commands.cpp\
|
commands/parse_commands.cpp\
|
||||||
commands/auth/nick.cpp\
|
commands/auth/nick.cpp\
|
||||||
commands/auth/pass.cpp\
|
commands/auth/pass.cpp\
|
||||||
commands/auth/user.cpp\
|
commands/auth/user.cpp\
|
||||||
commands/auth/cmd_utils.cpp\
|
commands/auth/auth_utils.cpp\
|
||||||
commands/channel/channel_utils.cpp\
|
commands/channel/channel_utils.cpp\
|
||||||
commands/channel/join.cpp\
|
commands/channel/join.cpp\
|
||||||
|
commands/channel/privmsg.cpp\
|
||||||
commands/not_done_cmd.cpp #special (temporary)
|
commands/not_done_cmd.cpp #special (temporary)
|
||||||
|
|
||||||
CC = c++
|
CC = c++
|
||||||
|
|||||||
@ -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/10 09:59:10 by apommier ### ########.fr */
|
/* Updated: 2023/02/11 14:48:19 by apommier ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
@ -20,12 +20,14 @@
|
|||||||
#include <netinet/in.h> //struct socket
|
#include <netinet/in.h> //struct socket
|
||||||
#include <sys/epoll.h> //epoll ensemble
|
#include <sys/epoll.h> //epoll ensemble
|
||||||
#include <unistd.h> //close()
|
#include <unistd.h> //close()
|
||||||
|
#include <fcntl.h> //fcntl
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
|
||||||
#include "function_tab.hpp"
|
#include "function_tab.hpp"
|
||||||
|
|
||||||
#define MAX_EVENTS 5
|
#define MAX_EVENTS 5
|
||||||
|
#define MAX_CHAN 10
|
||||||
#define READ_SIZE 10
|
#define READ_SIZE 10
|
||||||
#define CMD_NBR 10
|
#define CMD_NBR 10
|
||||||
|
|
||||||
@ -35,7 +37,7 @@
|
|||||||
|
|
||||||
struct channelData;
|
struct channelData;
|
||||||
|
|
||||||
struct clientData
|
struct clientData //each client have one
|
||||||
{
|
{
|
||||||
bool registered;
|
bool registered;
|
||||||
|
|
||||||
@ -49,38 +51,30 @@ struct clientData
|
|||||||
std::string serverName;
|
std::string serverName;
|
||||||
|
|
||||||
std::string cmdBuffer;
|
std::string cmdBuffer;
|
||||||
//std::string joinedChan[20];
|
|
||||||
//channelData *joinedChan; //is there a limit?
|
|
||||||
|
|
||||||
// std::vector<std::string> joinedChan;
|
|
||||||
std::vector<channelData *> joinedChan;
|
std::vector<channelData *> joinedChan;
|
||||||
int fd;
|
int fd;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct channelData
|
struct channelData //each chan have one
|
||||||
{
|
{
|
||||||
//std::string userList[MAX_EVENTS];
|
|
||||||
|
|
||||||
//clientData userList[MAX_EVENTS];
|
|
||||||
std::string name;
|
std::string name;
|
||||||
std::vector<clientData> userList;
|
std::vector<clientData *> userList;
|
||||||
std::vector<clientData> banList;
|
std::vector<clientData *> banList;
|
||||||
int op;
|
int op;
|
||||||
int nbrUser;
|
int nbrUser;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct fdList //&allFds in code | /!\ only one on the server | REFERENCE ONLY
|
||||||
|
|
||||||
struct fdList //&allFds in code
|
|
||||||
{
|
{
|
||||||
struct epoll_event events[MAX_EVENTS];
|
struct epoll_event events[MAX_EVENTS];
|
||||||
int epollFd;
|
int epollFd;
|
||||||
int serverFd;
|
int serverFd;
|
||||||
//int userList[MAX_EVENTS]; //list of userNbr's fd
|
|
||||||
std::vector<int> userList;
|
std::vector<int> userList;
|
||||||
std::vector<channelData> channelList;
|
std::vector<channelData> channelList;
|
||||||
//clientData userData[MAX_EVENTS];
|
|
||||||
std::vector<clientData> userData;
|
std::vector<clientData> userData;
|
||||||
|
|
||||||
|
// std::map<int, channelData> channelList;
|
||||||
|
// std::map<int, clientData> userData;
|
||||||
|
|
||||||
int nbrUser;
|
int nbrUser;
|
||||||
functionTab parsingTab;
|
functionTab parsingTab;
|
||||||
@ -88,30 +82,45 @@ struct fdList //&allFds in code
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* ************************************************************************** */
|
||||||
|
/* *********************************UTILS************************************ */
|
||||||
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
void ft_putstr_fd(int fd, std::string str);
|
||||||
|
void cmd_error(fdList &allFds, int userNbr, std::string error);
|
||||||
|
void ft_error(std::string str);
|
||||||
|
void close_fd(int fd);
|
||||||
|
void del_user_in_chan(clientData *user, channelData *chan);
|
||||||
|
void delete_user(fdList &allFds, int userNbr);
|
||||||
|
|
||||||
|
/* ************************************************************************** */
|
||||||
|
/* *******************************AUTH UTILS********************************* */
|
||||||
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
void print_registered_msg(fdList &allFds, int userNbr);
|
||||||
|
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
/* *******************************CMD UTILS********************************** */
|
/* *******************************CMD UTILS********************************** */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
void ft_error(std::string str);
|
|
||||||
void close_fd(int fd);
|
|
||||||
void cmd_error(fdList &allFds, int userNbr, std::string error);
|
|
||||||
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 print_registered_msg(fdList &allFds, int userNbr);
|
void split_but_keep(std::string const &str, const char delim, std::vector<std::string> &out); //same as split but keep one delimeter
|
||||||
|
|
||||||
|
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
/* *******************************CHAN UTILS********************************* */
|
/* *******************************CHAN UTILS********************************* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
int find_channel(fdList &allFds, std::string chanName);
|
int find_channel(fdList &allFds, std::string chanName);
|
||||||
|
int find_user(fdList &allFds, std::string userName);
|
||||||
|
void send_msg(fdList &allFds, std::string msg, std::string dest, int userNbr); //in privmsg.cpp
|
||||||
|
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
/* ******************************START SERVER******************************** */
|
/* ******************************START SERVER******************************** */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
void initialize(char **av); //1st
|
void initialize(char **av); //start_server.cpp
|
||||||
void start_loop(fdList &allFds); //3rd
|
void start_loop(fdList &allFds); //server_loop.cpp
|
||||||
|
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
/* *****************************EPOLL UTILITY******************************** */
|
/* *****************************EPOLL UTILITY******************************** */
|
||||||
|
|||||||
@ -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/09 21:39:38 by apommier ### ########.fr */
|
/* Updated: 2023/02/11 13:20:49 by apommier ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
@ -33,16 +33,24 @@ bool clientRequest(fdList &allFds, int userNbr)//,
|
|||||||
if (buffer.empty())
|
if (buffer.empty())
|
||||||
{
|
{
|
||||||
//delete client
|
//delete client
|
||||||
close(allFds.userData[userNbr].fd);
|
delete_user(allFds, userNbr);
|
||||||
allFds.userData.erase(allFds.userData.begin() + userNbr);
|
// close(allFds.userData[userNbr].fd);
|
||||||
allFds.userList.erase(allFds.userList.begin() + userNbr);
|
// allFds.userData.erase(allFds.userData.begin() + userNbr);
|
||||||
allFds.nbrUser--;
|
// allFds.userList.erase(allFds.userList.begin() + userNbr);
|
||||||
std::cout << "buffer empty\n";
|
// allFds.nbrUser--;
|
||||||
|
// 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
|
||||||
parse_commands(buf, allFds, userNbr);
|
|
||||||
|
std::vector<std::string> splitBuff;
|
||||||
|
split_but_keep(buffer, '\n', splitBuff);
|
||||||
|
for (size_t i = 0; i < splitBuff.size(); i++)
|
||||||
|
{
|
||||||
|
parse_commands(splitBuff[i], allFds, userNbr);
|
||||||
|
}
|
||||||
|
|
||||||
return (1);
|
return (1);
|
||||||
}
|
}
|
||||||
@ -1,42 +1,17 @@
|
|||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
/* */
|
/* */
|
||||||
/* ::: :::::::: */
|
/* ::: :::::::: */
|
||||||
/* cmd_utils.cpp :+: :+: :+: */
|
/* auth_utils.cpp :+: :+: :+: */
|
||||||
/* +:+ +:+ +:+ */
|
/* +:+ +:+ +:+ */
|
||||||
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2023/02/07 14:45:45 by apommier #+# #+# */
|
/* Created: 2023/02/07 14:45:45 by apommier #+# #+# */
|
||||||
/* Updated: 2023/02/10 09:27:27 by apommier ### ########.fr */
|
/* Updated: 2023/02/11 10:40:42 by apommier ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
#include "../../../includes/ft_irc.hpp"
|
#include "../../../includes/ft_irc.hpp"
|
||||||
|
|
||||||
void ft_putstr_fd(int fd, std::string str)
|
|
||||||
{
|
|
||||||
write(fd, str.c_str(), str.size());
|
|
||||||
write(fd, "\n", 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
void cmd_error(fdList &allFds, int fd, std::string error)
|
|
||||||
{
|
|
||||||
(void)allFds; //to delete
|
|
||||||
write(fd, ":irc.local ", 11);
|
|
||||||
write(fd, error.c_str(), error.size());
|
|
||||||
}
|
|
||||||
|
|
||||||
void split(std::string const &str, const char delim, std::vector<std::string> &out)
|
|
||||||
{
|
|
||||||
size_t start;
|
|
||||||
size_t end = 0;
|
|
||||||
|
|
||||||
while ((start = str.find_first_not_of(delim, end)) != std::string::npos)
|
|
||||||
{
|
|
||||||
end = str.find(delim, start);
|
|
||||||
out.push_back(str.substr(start, end - start));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void print_registered_msg(fdList &allFds, int userNbr)
|
void print_registered_msg(fdList &allFds, int userNbr)
|
||||||
{
|
{
|
||||||
ft_putstr_fd(allFds.userData[userNbr].fd, "-------------------WELCOME TO MY PERSONNAL IRC SERVER!-------------------" );
|
ft_putstr_fd(allFds.userData[userNbr].fd, "-------------------WELCOME TO MY PERSONNAL IRC SERVER!-------------------" );
|
||||||
@ -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/09 13:19:53 by apommier ### ########.fr */
|
/* Updated: 2023/02/11 12:57:50 by apommier ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
@ -18,34 +18,38 @@
|
|||||||
|
|
||||||
void USER(std::string buffer, fdList &allFds, int userNbr)
|
void USER(std::string buffer, fdList &allFds, int userNbr)
|
||||||
{
|
{
|
||||||
if (allFds.userData[userNbr].registered == 1)
|
|
||||||
{
|
(void)buffer;
|
||||||
cmd_error(allFds, allFds.userData[userNbr].fd, "462 * PASS :You may not reregister\n");
|
(void)allFds;
|
||||||
return ;
|
(void)userNbr;
|
||||||
}
|
// if (allFds.userData[userNbr].registered == 1)
|
||||||
|
// {
|
||||||
|
// cmd_error(allFds, allFds.userData[userNbr].fd, "462 * USER :You may not reregister\n");
|
||||||
|
// return ;
|
||||||
|
// }
|
||||||
|
|
||||||
std::string realName = buffer.substr(buffer.find_first_of(":") + 1 , buffer.npos);
|
// std::string realName = buffer.substr(buffer.find_first_of(":") + 1 , buffer.npos);
|
||||||
std::vector<std::string> splitBuff;
|
// std::vector<std::string> splitBuff;
|
||||||
|
|
||||||
|
|
||||||
buffer.resize(buffer.size() - realName.size());
|
// buffer.resize(buffer.size() - realName.size());
|
||||||
std::cout << "Buffer in userNbr = ---" << buffer << "---" << std::endl;
|
// std::cout << "Buffer in userNbr = ---" << buffer << "---" << std::endl;
|
||||||
std::cout << "realname in userNbr = ---" << realName << "---" << std::endl;
|
// std::cout << "realname in userNbr = ---" << realName << "---" << std::endl;
|
||||||
split(buffer, ' ', splitBuff);
|
// split(buffer, ' ', splitBuff);
|
||||||
if (splitBuff.size() < 4)
|
// if (splitBuff.size() < 4)
|
||||||
{
|
// {
|
||||||
cmd_error(allFds, allFds.userData[userNbr].fd, "461 * PASS :Not enough parameters\n");
|
// cmd_error(allFds, allFds.userData[userNbr].fd, "461 * USER :Not enough parameters\n");
|
||||||
//write(allFds.userData[userNbr].fd, "ERR_NEEDMOREPARAMS", 18);
|
// //write(allFds.userData[userNbr].fd, "ERR_NEEDMOREPARAMS", 18);
|
||||||
return ;
|
// return ;
|
||||||
}
|
// }
|
||||||
allFds.userData[userNbr].userName = splitBuff[1];
|
// allFds.userData[userNbr].userName = splitBuff[1];
|
||||||
allFds.userData[userNbr].hostName = splitBuff[2];
|
// allFds.userData[userNbr].hostName = splitBuff[2];
|
||||||
allFds.userData[userNbr].serverName = splitBuff[3];
|
// allFds.userData[userNbr].serverName = splitBuff[3];
|
||||||
|
|
||||||
allFds.userData[userNbr].realName = realName;
|
// allFds.userData[userNbr].realName = realName;
|
||||||
if (!allFds.userData[userNbr].nickname.empty())
|
// if (!allFds.userData[userNbr].nickname.empty())
|
||||||
{
|
// {
|
||||||
allFds.userData[userNbr].registered = 1;
|
// allFds.userData[userNbr].registered = 1;
|
||||||
print_registered_msg(allFds, userNbr);
|
// print_registered_msg(allFds, userNbr);
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
@ -6,22 +6,43 @@
|
|||||||
/* 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/09 20:56:31 by apommier ### ########.fr */
|
/* Updated: 2023/02/11 12:25:58 by apommier ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
#include "../../../includes/ft_irc.hpp"
|
#include "../../../includes/ft_irc.hpp"
|
||||||
|
|
||||||
int find_channel(fdList &allFds, std::string chanName)
|
int find_channel(fdList &allFds, std::string chanName)//return channel nbr
|
||||||
{
|
{
|
||||||
std::vector<channelData>::iterator start = allFds.channelList.begin();
|
std::vector<channelData>::iterator start = allFds.channelList.begin();
|
||||||
std::vector<channelData>::iterator pastEnd = allFds.channelList.end();
|
std::vector<channelData>::iterator pastEnd = allFds.channelList.end();
|
||||||
|
std::cout << "name1= ---" << chanName << "---\n";
|
||||||
while (start != pastEnd)
|
while (start != pastEnd)
|
||||||
{
|
{
|
||||||
std::cout << "result in find chan = " << pastEnd - start << std::endl;
|
std::cout << "result in find chan = " << pastEnd - start << std::endl;
|
||||||
if (allFds.channelList[pastEnd - start].name == chanName)
|
std::cout << "name2= ---" << allFds.channelList[pastEnd - start - 1].name << "---\n";
|
||||||
return (pastEnd - start);
|
if (allFds.channelList[pastEnd - start - 1].name == chanName)
|
||||||
|
return (pastEnd - start - 1);
|
||||||
start++;
|
start++;
|
||||||
}
|
}
|
||||||
return (0);
|
std::cout << "chan not found\n";
|
||||||
}
|
return (-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
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::cout << "name1= ---" << userName << "---\n";
|
||||||
|
while (start != pastEnd)
|
||||||
|
{
|
||||||
|
std::cout << "result in find user = " << pastEnd - start << std::endl;
|
||||||
|
std::cout << "name2= ---" << allFds.userData[pastEnd - start - 1].nickname << "---\n";
|
||||||
|
if (allFds.userData[pastEnd - start - 1].nickname == userName)
|
||||||
|
return (allFds.userData[pastEnd - start - 1].fd);
|
||||||
|
start++;
|
||||||
|
}
|
||||||
|
std::cout << "user not found\n";
|
||||||
|
return (-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|||||||
@ -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/09 21:55:57 by apommier ### ########.fr */
|
/* Updated: 2023/02/11 14:55:28 by apommier ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
@ -16,7 +16,15 @@ void JOIN(std::string buffer, fdList &allFds, int userNbr)
|
|||||||
{
|
{
|
||||||
std::vector<std::string> splitBuff;
|
std::vector<std::string> splitBuff;
|
||||||
int chanNbr;
|
int chanNbr;
|
||||||
std::cout << "join start\n";
|
std::cout << "==========join start========\n";
|
||||||
|
|
||||||
|
if (allFds.channelList.size() == MAX_CHAN)
|
||||||
|
{
|
||||||
|
std::cout << "creation of channel refused, maximum number reached" << std::endl; // send msg to user?
|
||||||
|
return ;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::cout << "userNbr= " << userNbr << std::endl;
|
||||||
split(buffer, ' ', splitBuff);
|
split(buffer, ' ', splitBuff);
|
||||||
if (splitBuff.size() < 2)
|
if (splitBuff.size() < 2)
|
||||||
{
|
{
|
||||||
@ -25,25 +33,48 @@ void JOIN(std::string buffer, fdList &allFds, int userNbr)
|
|||||||
}
|
}
|
||||||
|
|
||||||
chanNbr = find_channel(allFds, splitBuff[1]);
|
chanNbr = find_channel(allFds, splitBuff[1]);
|
||||||
if (chanNbr)
|
if (chanNbr != -1) //chan already exist
|
||||||
{
|
{
|
||||||
//allFds.userData[userNbr].joinedChan.push_back(splitBuff[1]);
|
allFds.userData[userNbr].joinedChan.push_back(&allFds.channelList[chanNbr]); //add chan in user data
|
||||||
|
allFds.channelList[chanNbr].userList.push_back(&allFds.userData[userNbr]);//add user in chan data
|
||||||
|
allFds.channelList[chanNbr].nbrUser++;
|
||||||
|
std::cout << "join2 nickname " << allFds.channelList.back().userList[0]->nickname << std::endl;
|
||||||
|
std::cout << "join2 fd " << allFds.channelList.back().userList[0]->nickname << std::endl;
|
||||||
|
//allFds.channelList.push_back(new_chan);
|
||||||
|
//std::cout << "nbruser in existent chan / persistence = " << allFds.channelList[chanNbr].nbrUser << std::endl;
|
||||||
|
//std::cout << "nbruser in existent user / persistence = " << allFds.userData[userNbr].joinedChan[0]->nbrUser << std::endl;
|
||||||
//message nickname joined the channel?
|
//message nickname joined the channel?
|
||||||
}
|
}
|
||||||
else
|
else //chan doesn't exist yet
|
||||||
{
|
{
|
||||||
std::cout << "new chan\n";
|
std::cout << "new chan\n";
|
||||||
channelData new_chan;
|
channelData new_chan;
|
||||||
|
|
||||||
new_chan.name = splitBuff[1];
|
new_chan.name = splitBuff[1];
|
||||||
|
new_chan.nbrUser = 1;
|
||||||
|
new_chan.userList.push_back(&allFds.userData[userNbr]);
|
||||||
//new_chan.userList
|
//new_chan.userList
|
||||||
|
|
||||||
allFds.channelList.push_back(new_chan);
|
allFds.channelList.push_back(new_chan);
|
||||||
allFds.userData[userNbr].joinedChan.push_back(&allFds.channelList.back());
|
allFds.userData[userNbr].joinedChan.push_back(&allFds.channelList.back());//add chan in user data
|
||||||
|
//allFds.channelList.back().userList.push_back(&allFds.userData[userNbr]);//add user in chan data
|
||||||
|
|
||||||
|
|
||||||
|
// allFds.userData[userNbr].joinedChan.push_back(&allFds.channelList[chanNbr]); //add chan in user data
|
||||||
|
// allFds.channelList[chanNbr].userList.push_back(&allFds.userData[userNbr]);//add user in chan data
|
||||||
|
// allFds.channelList[chanNbr].nbrUser++;
|
||||||
|
|
||||||
|
|
||||||
|
std::cout << "join nickname " << allFds.channelList[0].userList[0]->nickname << std::endl;
|
||||||
|
std::cout << "join fd " << allFds.channelList[0].userList[0]->fd << std::endl;
|
||||||
|
//ft_putstr_fd(allFds.channelList[fd].userList[i]->fd, fullMsg);
|
||||||
|
//std::cout << "loop here\n";
|
||||||
|
|
||||||
//message nickname created the channel?
|
//message nickname created the channel?
|
||||||
}
|
}
|
||||||
std::cout << "============persitence test============\n";
|
// std::cout << "============persitence test============\n";
|
||||||
allFds.channelList.back().name = "new name";
|
// std::cout << "odlname = " << allFds.userData[userNbr].joinedChan.back()->name << std::endl;
|
||||||
std::cout << "newname = " << allFds.userData[userNbr].joinedChan.back()->name << std::endl;
|
// allFds.channelList.back().name = "new name";
|
||||||
//allFds.channelList;
|
// std::cout << "newname = " << allFds.userData[userNbr].joinedChan.back()->name << std::endl;
|
||||||
|
// //allFds.channelList;
|
||||||
}
|
}
|
||||||
77
srcs/commands/channel/privmsg.cpp
Normal file
77
srcs/commands/channel/privmsg.cpp
Normal file
@ -0,0 +1,77 @@
|
|||||||
|
/* ************************************************************************** */
|
||||||
|
/* */
|
||||||
|
/* ::: :::::::: */
|
||||||
|
/* privmsg.cpp :+: :+: :+: */
|
||||||
|
/* +:+ +:+ +:+ */
|
||||||
|
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||||
|
/* +#+#+#+#+#+ +#+ */
|
||||||
|
/* Created: 2023/02/11 08:53:03 by apommier #+# #+# */
|
||||||
|
/* Updated: 2023/02/11 12:38:51 by apommier ### ########.fr */
|
||||||
|
/* */
|
||||||
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
#include "../../../includes/ft_irc.hpp"
|
||||||
|
|
||||||
|
|
||||||
|
void PRIVMSG(std::string buffer, fdList &allFds, int userNbr)
|
||||||
|
{
|
||||||
|
std::vector<std::string> splitBuff;
|
||||||
|
std::string msg;
|
||||||
|
|
||||||
|
split(buffer, ' ', splitBuff);
|
||||||
|
if (splitBuff.size() < 3)
|
||||||
|
{
|
||||||
|
cmd_error(allFds, allFds.userData[userNbr].fd, "431 * PRIVMSG :Not enought argument\n");
|
||||||
|
//write(allFds.userData[user].fd, "ERR_NEEDMOREPARAMS", 18);
|
||||||
|
return ;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (size_t i = 2; i < splitBuff.size(); i++)
|
||||||
|
{
|
||||||
|
msg += (" " + splitBuff[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
std::vector<std::string> dest;
|
||||||
|
split(splitBuff[1], ',', dest);
|
||||||
|
for (size_t i = 0; i < dest.size(); i++)
|
||||||
|
{
|
||||||
|
send_msg(allFds, msg, dest[i], userNbr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void send_msg(fdList &allFds, std::string msg, std::string dest, int userNbr)
|
||||||
|
{
|
||||||
|
int fd;
|
||||||
|
//find dest
|
||||||
|
std::string fullMsg;
|
||||||
|
fullMsg = "*" + allFds.userData[userNbr].nickname + "* " + msg;
|
||||||
|
fd = find_channel(allFds, dest); //return channel nbr
|
||||||
|
if (fd != -1)
|
||||||
|
{
|
||||||
|
//std::vector<clientData *>::iterator start = allFds.channelList[fd].userList.begin();
|
||||||
|
//std::vector<clientData *>::iterator pastEnd = allFds.channelList[fd].userList.end();
|
||||||
|
// while (start != pastEnd)
|
||||||
|
// {
|
||||||
|
// std::cout << "send nickname" << (*start)->nickname << std::endl;
|
||||||
|
// ft_putstr_fd((*start)->fd, fullMsg);
|
||||||
|
// start++;
|
||||||
|
// std::cout << "loop here\n";
|
||||||
|
// }
|
||||||
|
for (size_t i = 0; i < allFds.channelList[fd].userList.size(); i++)
|
||||||
|
{
|
||||||
|
std::cout << "send nickname " << allFds.channelList[fd].userList[i]->nickname << std::endl;
|
||||||
|
ft_putstr_fd(allFds.channelList[fd].userList[i]->fd, fullMsg);
|
||||||
|
std::cout << "loop here\n";
|
||||||
|
}
|
||||||
|
return ;
|
||||||
|
}
|
||||||
|
|
||||||
|
fd = find_user(allFds, dest); //return direct user fd
|
||||||
|
if (fd != -1)
|
||||||
|
{
|
||||||
|
ft_putstr_fd(fd, fullMsg);
|
||||||
|
return ;
|
||||||
|
}
|
||||||
|
std::cout << "error msg\n";
|
||||||
|
//ft_putstr_fd(fd, msg);
|
||||||
|
}
|
||||||
38
srcs/commands/cmd_utils.cpp
Normal file
38
srcs/commands/cmd_utils.cpp
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
/* ************************************************************************** */
|
||||||
|
/* */
|
||||||
|
/* ::: :::::::: */
|
||||||
|
/* cmd_utils.cpp :+: :+: :+: */
|
||||||
|
/* +:+ +:+ +:+ */
|
||||||
|
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||||
|
/* +#+#+#+#+#+ +#+ */
|
||||||
|
/* Created: 2023/02/10 15:46:10 by apommier #+# #+# */
|
||||||
|
/* Updated: 2023/02/11 13:51:28 by apommier ### ########.fr */
|
||||||
|
/* */
|
||||||
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
#include "../../includes/ft_irc.hpp"
|
||||||
|
|
||||||
|
void split(std::string const &str, const char delim, std::vector<std::string> &out)
|
||||||
|
{
|
||||||
|
size_t start;
|
||||||
|
size_t end = 0;
|
||||||
|
|
||||||
|
while ((start = str.find_first_not_of(delim, end)) != std::string::npos)
|
||||||
|
{
|
||||||
|
end = str.find(delim, start);
|
||||||
|
out.push_back(str.substr(start, end - start));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void split_but_keep(std::string const &str, const char delim, std::vector<std::string> &out)
|
||||||
|
{
|
||||||
|
size_t start;
|
||||||
|
size_t end = 0;
|
||||||
|
|
||||||
|
while ((start = str.find_first_not_of(delim, end)) != std::string::npos)
|
||||||
|
{
|
||||||
|
end = str.find(delim, start); //find end of string
|
||||||
|
out.push_back(str.substr(start, end + 1 - start)); //here
|
||||||
|
//std::cout << "split test = ---" << str.substr(start, end + 1 - start) << "---\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -6,7 +6,7 @@
|
|||||||
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2023/02/09 22:04:11 by apommier #+# #+# */
|
/* Created: 2023/02/09 22:04:11 by apommier #+# #+# */
|
||||||
/* Updated: 2023/02/10 09:30:45 by apommier ### ########.fr */
|
/* Updated: 2023/02/11 08:53:59 by apommier ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
@ -164,13 +164,13 @@ void INFO(std::string buffer, fdList &allFds, int userNbr)
|
|||||||
return ;
|
return ;
|
||||||
}
|
}
|
||||||
|
|
||||||
void PRIVMSG(std::string buffer, fdList &allFds, int userNbr)
|
// void PRIVMSG(std::string buffer, fdList &allFds, int userNbr)
|
||||||
{
|
// {
|
||||||
(void)buffer;
|
// (void)buffer;
|
||||||
(void)allFds;
|
// (void)allFds;
|
||||||
(void)userNbr;
|
// (void)userNbr;
|
||||||
return ;
|
// return ;
|
||||||
}
|
// }
|
||||||
|
|
||||||
void NOTICE(std::string buffer, fdList &allFds, int userNbr)
|
void NOTICE(std::string buffer, fdList &allFds, int userNbr)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -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/10 09:26:31 by apommier ### ########.fr */
|
/* Updated: 2023/02/11 15:11:24 by apommier ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
@ -21,6 +21,7 @@ std::string ft_test()
|
|||||||
void parse_commands(std::string buffer, fdList &allFds, int userNbr)
|
void parse_commands(std::string buffer, fdList &allFds, int userNbr)
|
||||||
{
|
{
|
||||||
//std::string cmd = buffer;
|
//std::string cmd = buffer;
|
||||||
|
std::cout << "===========parse command=============" << std::endl;
|
||||||
std::vector<std::string> splitBuff;
|
std::vector<std::string> splitBuff;
|
||||||
int a = 0;
|
int a = 0;
|
||||||
|
|
||||||
@ -30,16 +31,16 @@ void parse_commands(std::string buffer, fdList &allFds, int userNbr)
|
|||||||
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 (splitBuff[0] != allFds.parsingTab.cmdName[a] && a < allFds.parsingTab.cmdNbr)
|
while (a < allFds.parsingTab.cmdNbr - 1 && splitBuff[0] != allFds.parsingTab.cmdName[a])
|
||||||
a++;
|
a++;
|
||||||
std::cout << "after while \n";
|
//std::cout << "after while \n";
|
||||||
if (a == allFds.parsingTab.cmdNbr)
|
if (a == allFds.parsingTab.cmdNbr - 1)
|
||||||
std::cout << "Command not found\n";
|
std::cout << "Command not found\n";
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
std::cout << "Command name = " << allFds.parsingTab.cmdName[a] << std::endl;
|
//std::cout << "Command name = " << allFds.parsingTab.cmdName[a] << std::endl;
|
||||||
std::cout << "Command nbr = " << a << std::endl;
|
//std::cout << "Command nbr = " << a << std::endl;
|
||||||
allFds.parsingTab.cmdPtr[a](allFds.userData[userNbr].cmdBuffer, allFds, userNbr);
|
allFds.parsingTab.cmdPtr[a](allFds.userData[userNbr].cmdBuffer, allFds, userNbr);
|
||||||
//allFds.parsingTab.cmdPtr[a]
|
//allFds.parsingTab.cmdPtr[a]
|
||||||
//JOIN(allFds.userData[userNbr].cmdBuffer, allFds, userNbr);
|
//JOIN(allFds.userData[userNbr].cmdBuffer, allFds, userNbr);
|
||||||
|
|||||||
@ -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/10 09:19:45 by apommier ### ########.fr */
|
/* Updated: 2023/02/11 14:47:52 by apommier ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
@ -16,46 +16,38 @@ void new_connection(fdList &allFds)
|
|||||||
{
|
{
|
||||||
struct sockaddr_in addr;
|
struct sockaddr_in addr;
|
||||||
int addrLen = sizeof(addr);
|
int addrLen = sizeof(addr);
|
||||||
|
int newFd;
|
||||||
|
|
||||||
|
std::cout << "==========newconnection========\n";
|
||||||
//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);
|
||||||
allFds.userList[allFds.nbrUser] = accept(allFds.serverFd, (struct sockaddr *)&addr, (socklen_t*)&addrLen);
|
newFd = accept(allFds.serverFd, (struct sockaddr *)&addr, (socklen_t*)&addrLen);
|
||||||
|
//allFds.userList[allFds.nbrUser] = newFd;
|
||||||
std::cout << "newConnection | user fd = " << allFds.userList[allFds.nbrUser] << std::endl;
|
allFds.userList.push_back(newFd);
|
||||||
|
//std::cout << "newConnection | old user fd = " << newFd << std::endl;
|
||||||
|
if (fcntl(newFd, F_SETFL, O_NONBLOCK) == -1)
|
||||||
|
ft_error("fctnl() error");
|
||||||
|
|
||||||
|
|
||||||
|
//std::cout << "fcntl return = " << newFd;
|
||||||
|
//close(newFd);
|
||||||
|
//std::cout << "newConnection | user fd = " << allFds.userList[allFds.nbrUser] << std::endl;
|
||||||
|
|
||||||
clientData newElement;
|
clientData newElement;
|
||||||
|
newElement.fd = newFd;
|
||||||
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;
|
|
||||||
|
|
||||||
epoll_add(allFds.epollFd, allFds.userList[allFds.nbrUser]);
|
epoll_add(allFds.epollFd, allFds.userList[allFds.nbrUser]);
|
||||||
allFds.nbrUser++;
|
allFds.nbrUser++;
|
||||||
}
|
}
|
||||||
|
|
||||||
// void new_connection(fdList *allFds, struct epoll_event newClient)
|
|
||||||
// {
|
|
||||||
// struct sockaddr_in addr;
|
|
||||||
// int addrLen = sizeof(addr);
|
|
||||||
|
|
||||||
// std::cout << "new connection !" << std::endl;
|
|
||||||
// if (MAX_EVENTS == (*allFds).nbrUser)
|
|
||||||
// std::cout << "new connection refused, already full" << std::endl;
|
|
||||||
// (*allFds).userList[(*allFds).nbrUser] = accept((*allFds).serverFd, (struct sockaddr *)&addr, (socklen_t*)&addrLen);
|
|
||||||
|
|
||||||
// std::cout << "newConnection | user fd = " << (*allFds).userList[(*allFds).nbrUser] << std::endl;
|
|
||||||
|
|
||||||
// (*allFds).userData[(*allFds).nbrUser].fd = (*allFds).userList[(*allFds).nbrUser];
|
|
||||||
// std::cout << "newConnection | user in data fd = " << (*allFds).userData[(*allFds).nbrUser].fd << std::endl;
|
|
||||||
|
|
||||||
// epoll_add((*allFds).epollFd, (*allFds).userList[(*allFds).nbrUser]);
|
|
||||||
// (*allFds).nbrUser++;
|
|
||||||
// }
|
|
||||||
@ -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/10 09:20:58 by apommier ### ########.fr */
|
/* Updated: 2023/02/11 14:06:49 by apommier ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
@ -24,13 +24,16 @@ void start_loop(fdList &allFds)
|
|||||||
std::cout << "serverFd: " << allFds.serverFd << std::endl;
|
std::cout << "serverFd: " << allFds.serverFd << std::endl;
|
||||||
while (alive)
|
while (alive)
|
||||||
{
|
{
|
||||||
|
//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);
|
eventNbr = epoll_wait(allFds.epollFd, allFds.events, MAX_EVENTS, 5000);
|
||||||
//std::cout << "eventNbr: " << eventNbr << std::endl;
|
//std::cout << "eventNbr: " << eventNbr << std::endl;
|
||||||
//std::cout << "in loop adress " << &allFds << std::endl;
|
//std::cout << "in loop adress " << &allFds << std::endl;
|
||||||
for (i = 0; i < eventNbr ; i++)
|
for (i = 0; i < eventNbr ; i++)
|
||||||
{
|
{
|
||||||
std::cout << "event[i]'s fd: " << allFds.events[i].data.fd << std::endl;
|
|
||||||
std::cout << "i= " << i << std::endl;
|
//std::cout << "event[i]'s fd: " << allFds.events[i].data.fd << std::endl;
|
||||||
|
//std::cout << "i= " << i << std::endl;
|
||||||
if (allFds.events[i].data.fd == allFds.serverFd)
|
if (allFds.events[i].data.fd == allFds.serverFd)
|
||||||
{
|
{
|
||||||
new_connection(allFds);
|
new_connection(allFds);
|
||||||
@ -39,11 +42,10 @@ void start_loop(fdList &allFds)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
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();
|
||||||
std::cout << "fd loop " << allFds.userData[nbr].fd << std::endl;
|
|
||||||
std::cout << "nbr loop " << nbr << std::endl;
|
|
||||||
//if (!clientRequest(allFds, i))
|
//if (!clientRequest(allFds, i))
|
||||||
if (!clientRequest(allFds, nbr))
|
if (!clientRequest(allFds, nbr))
|
||||||
alive = false;
|
alive = false;
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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/10 09:18:45 by apommier ### ########.fr */
|
/* Updated: 2023/02/11 14:49:36 by apommier ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
@ -28,6 +28,9 @@ void initialize(char **av)
|
|||||||
//int addrLen = sizeof(addr);
|
//int addrLen = sizeof(addr);
|
||||||
fdList allFds;
|
fdList allFds;
|
||||||
|
|
||||||
|
allFds.userData.reserve(MAX_EVENTS);
|
||||||
|
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);
|
||||||
if (allFds.serverFd == -1)
|
if (allFds.serverFd == -1)
|
||||||
|
|||||||
@ -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: 2022/12/07 01:09:12 by apommier ### ########.fr */
|
/* Updated: 2023/02/11 12:24:33 by apommier ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
@ -27,4 +27,47 @@ void close_fd(int fd)
|
|||||||
{
|
{
|
||||||
if (close(fd))
|
if (close(fd))
|
||||||
ft_error("close() error");
|
ft_error("close() error");
|
||||||
|
}
|
||||||
|
|
||||||
|
void ft_putstr_fd(int fd, std::string str)
|
||||||
|
{
|
||||||
|
write(fd, str.c_str(), str.size());
|
||||||
|
write(fd, "\n", 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
void cmd_error(fdList &allFds, int fd, std::string error)
|
||||||
|
{
|
||||||
|
(void)allFds; //to delete
|
||||||
|
write(fd, ":irc.local ", 11);
|
||||||
|
write(fd, error.c_str(), error.size());
|
||||||
|
}
|
||||||
|
|
||||||
|
// 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