authentification work pretty great, you can crtl+c client without bug so delete client work, and support multi connexion

This commit is contained in:
kinou-p 2023-02-09 15:42:52 +01:00
parent fb1b7b10cf
commit d2d8d2cdd9
13 changed files with 246 additions and 126 deletions

View File

@ -6,7 +6,7 @@
# By: apommier <apommier@student.42.fr> +#+ +:+ +#+ #
# +#+#+#+#+#+ +#+ #
# Created: 2022/12/01 17:27:29 by apommier #+# #+# #
# Updated: 2023/02/07 14:47:20 by apommier ### ########.fr #
# Updated: 2023/02/09 14:35:20 by apommier ### ########.fr #
# #
# **************************************************************************** #
@ -25,8 +25,8 @@ SRCS := main.cpp\
commands/auth/utils.cpp
CC = c++
FLAGS = -g
#-Wall -Wextra -Werror
FLAGS = -g
#FLAGS2 = -Wall -Wextra -Werror -std=c++98
DIR_OBJ := obj
DIR_INC = -I ./includes/
DIR_SRCS := ./srcs
@ -40,10 +40,10 @@ all: ${NAME}
${DIR_OBJ}/%.o: ${DIR_SRCS}/%.cpp
mkdir -p ${dir $@}
${CC} ${FLAGS} ${DIR_INC} -o $@ -c $< -MMD
${CC} ${FLAGS} ${FLAGS2} ${DIR_INC} -o $@ -c $< -MMD
${NAME}: ${OBJS}
${CC} ${FLAGS} ${OBJS} -o ${NAME}
${CC} ${FLAGS} ${FLAGS2} ${OBJS} -o ${NAME}
clean:
${RM} ${DIR_OBJ}

View File

@ -6,7 +6,7 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2022/12/01 17:27:37 by apommier #+# #+# */
/* Updated: 2023/02/07 20:25:26 by apommier ### ########.fr */
/* Updated: 2023/02/09 14:41:14 by apommier ### ########.fr */
/* */
/* ************************************************************************** */
@ -21,6 +21,7 @@
#include <sys/epoll.h> //epoll ensemble
#include <unistd.h> //close()
#include <vector>
#include <algorithm>
#define MAX_EVENTS 5
#define READ_SIZE 10
@ -35,46 +36,46 @@ struct fdList;
/* *********************************COMMANDS********************************* */
/* ************************************************************************** */
void PASS(std::string buffer, fdList allFds, int user);
void NICK(std::string buffer, fdList allFds, int user);
void USER(std::string buffer, fdList allFds, int user);
void SERVER(std::string buffer, fdList allFds, int user);
void OPER(std::string buffer, fdList allFds, int user);
void QUIT(std::string buffer, fdList allFds, int user);
void SQUIT(std::string buffer, fdList allFds, int user);
void JOIN(std::string buffer, fdList allFds, int user);
void PART(std::string buffer, fdList allFds, int user);
void MODE(std::string buffer, fdList allFds, int user);
void TOPIC(std::string buffer, fdList allFds, int user);
void NAMES(std::string buffer, fdList allFds, int user);
void LIST(std::string buffer, fdList allFds, int user);
void INVITE(std::string buffer, fdList allFds, int user);
void KICK(std::string buffer, fdList allFds, int user);
void VERSION(std::string buffer, fdList allFds, int user);
void STATS(std::string buffer, fdList allFds, int user);
void LINKS(std::string buffer, fdList allFds, int user);
void TIME(std::string buffer, fdList allFds, int user);
void CONNECT(std::string buffer, fdList allFds, int user);
void TRACE(std::string buffer, fdList allFds, int user);
void ADMIN(std::string buffer, fdList allFds, int user);
void INFO(std::string buffer, fdList allFds, int user);
void PRIVMSG(std::string buffer, fdList allFds, int user);
void NOTICE(std::string buffer, fdList allFds, int user);
void WHO(std::string buffer, fdList allFds, int user);
void WHOIS(std::string buffer, fdList allFds, int user);
void WHOWAS(std::string buffer, fdList allFds, int user);
void KILL(std::string buffer, fdList allFds, int user);
void PING(std::string buffer, fdList allFds, int user);
void PONG(std::string buffer, fdList allFds, int user);
void ERROR(std::string buffer, fdList allFds, int user);
void AWAY(std::string buffer, fdList allFds, int user);
void REHASH(std::string buffer, fdList allFds, int user);
void RESTART(std::string buffer, fdList allFds, int user);
void SUMMON(std::string buffer, fdList allFds, int user);
void USER(std::string buffer, fdList allFds, int user);
void OPERWALL(std::string buffer, fdList allFds, int user);
void USERHOST(std::string buffer, fdList allFds, int user);
void ISON(std::string buffer, fdList allFds, int user);
void PASS(std::string buffer, fdList &allFds, int userNbr);
void NICK(std::string buffer, fdList &allFds, int userNbr);
void USER(std::string buffer, fdList &allFds, int userNbr);
void SERVER(std::string buffer, fdList &allFds, int userNbr);
void OPER(std::string buffer, fdList &allFds, int userNbr);
void QUIT(std::string buffer, fdList &allFds, int userNbr);
void SQUIT(std::string buffer, fdList &allFds, int userNbr);
void JOIN(std::string buffer, fdList &allFds, int userNbr);
void PART(std::string buffer, fdList &allFds, int userNbr);
void MODE(std::string buffer, fdList &allFds, int userNbr);
void TOPIC(std::string buffer, fdList &allFds, int userNbr);
void NAMES(std::string buffer, fdList &allFds, int userNbr);
void LIST(std::string buffer, fdList &allFds, int userNbr);
void INVITE(std::string buffer, fdList &allFds, int userNbr);
void KICK(std::string buffer, fdList &allFds, int userNbr);
void VERSION(std::string buffer, fdList &allFds, int userNbr);
void STATS(std::string buffer, fdList &allFds, int userNbr);
void LINKS(std::string buffer, fdList &allFds, int userNbr);
void TIME(std::string buffer, fdList &allFds, int userNbr);
void CONNECT(std::string buffer, fdList &allFds, int userNbr);
void TRACE(std::string buffer, fdList &allFds, int userNbr);
void ADMIN(std::string buffer, fdList &allFds, int userNbr);
void INFO(std::string buffer, fdList &allFds, int userNbr);
void PRIVMSG(std::string buffer, fdList &allFds, int userNbr);
void NOTICE(std::string buffer, fdList &allFds, int userNbr);
void WHO(std::string buffer, fdList &allFds, int userNbr);
void WHOIS(std::string buffer, fdList &allFds, int userNbr);
void WHOWAS(std::string buffer, fdList &allFds, int userNbr);
void KILL(std::string buffer, fdList &allFds, int userNbr);
void PING(std::string buffer, fdList &allFds, int userNbr);
void PONG(std::string buffer, fdList &allFds, int userNbr);
void ERROR(std::string buffer, fdList &allFds, int userNbr);
void AWAY(std::string buffer, fdList &allFds, int userNbr);
void REHASH(std::string buffer, fdList &allFds, int userNbr);
void RESTART(std::string buffer, fdList &allFds, int userNbr);
void SUMMON(std::string buffer, fdList &allFds, int userNbr);
void USER(std::string buffer, fdList &allFds, int userNbr);
void OPERWALL(std::string buffer, fdList &allFds, int userNbr);
void USERHOST(std::string buffer, fdList &allFds, int userNbr);
void ISON(std::string buffer, fdList &allFds, int userNbr);
/* ************************************************************************** */
@ -146,16 +147,16 @@ struct functionTab
//std::string (*cmdPtr[cmdNbr])(void) =
void (*cmdPtr[cmdNbr])(std::string buffer, fdList allFds, int user) =
void (*cmdPtr[cmdNbr])(std::string buffer, fdList &allFds, int userNbr) =
{
//ft_test
//4. Détails des messages
// //4.1 Etablissement de connexion
// PASS,
NICK
// USER,
PASS,
NICK,
USER
// SERVER,
// OPER,
// QUIT,
@ -244,13 +245,16 @@ struct channelData
struct fdList //allFds in code
struct fdList //&allFds in code
{
struct epoll_event events[MAX_EVENTS];
int epollFd;
int serverFd;
int userList[MAX_EVENTS]; //list of user's fd
clientData userData[MAX_EVENTS];
//int userList[MAX_EVENTS]; //list of userNbr's fd
std::vector<int> userList;
//clientData userData[MAX_EVENTS];
std::vector<clientData> userData;
int nbrUser;
functionTab parsingTab;
};
@ -265,15 +269,16 @@ struct fdList //allFds in code
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 print_registered_msg(fdList &allFds, int userNbr);
/* ************************************************************************** */
/* ******************************START SERVER******************************** */
/* ************************************************************************** */
void cmd_error(fdList allFds, int user, std::string error);
void split(std::string const &str, const char delim, std::vector<std::string> &out);
void initialize(char **av); //1st
void start_loop(fdList allFds); //3rd
void start_loop(fdList &allFds); //3rd
/* ************************************************************************** */
/* *****************************EPOLL UTILITY******************************** */
@ -286,12 +291,12 @@ int epoll_start(); //2nd
/* *************************CONNECTION AND REQUEST*************************** */
/* ************************************************************************** */
void new_connection(fdList allFds, struct epoll_event newClient);
bool clientRequest(fdList allFds, int user);
void new_connection(fdList &allFds, struct epoll_event newClient);
bool clientRequest(fdList &allFds, int userNbr);
/* ************************************************************************** */
/* ***************************COMMANDS PARSING******************************* */
/* ************************************************************************** */
void parse_commands(std::string buffer, fdList allFds, int user);
void parse_commands(std::string buffer, fdList &allFds, int userNbr);

View File

@ -6,25 +6,43 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2022/12/09 22:34:36 by apommier #+# #+# */
/* Updated: 2023/02/07 11:24:51 by apommier ### ########.fr */
/* Updated: 2023/02/09 15:07:06 by apommier ### ########.fr */
/* */
/* ************************************************************************** */
#include "../includes/ft_irc.hpp"
bool clientRequest(fdList allFds, int user)//,
bool clientRequest(fdList &allFds, int userNbr)//,
{
int clientFd = allFds.events[user].data.fd;
//int userFd = allFds.events[user].data.fd;
char buf[1024] = {0};
std::string buffer;
size_t len = 1024;
//buf.reserve(1024);
//se demerder pour join quand pas \n
std::cout << "client request!" << std::endl;
if (recv(clientFd, buf, len, 0) == -1)
// std::cout << "fd in client request " << allFds.userData[userNbr].fd << std::endl;
// std::cout << "fd of list in client request " << allFds.userList[userNbr] << std::endl;
// std::cout << "user nbr " << userNbr << std::endl;
//std::cout << "client request!" << std::endl;
//if (recv(allFds.userData[userNbr].fd, buf, len, 0) == -1)
if (recv(allFds.userData[userNbr].fd, buf, len, 0) == -1)
ft_error("recv() error");
buffer = buf;
if (buffer.empty())
{
//delete client
close(allFds.userData[userNbr].fd);
allFds.userData.erase(allFds.userData.begin() + userNbr);
allFds.userList.erase(allFds.userList.begin() + userNbr);
allFds.nbrUser--;
std::cout << "buffer empty\n";
return (1);
}
std::cout << "BUFFER: ---" << buf << "---" << std::endl;
//split with \n and while (tab de split) -> parsing
parse_commands(buf, allFds, user);
parse_commands((std::string)buf, allFds, userNbr);
return (1);
}

View File

@ -6,7 +6,7 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2023/02/06 14:28:38 by apommier #+# #+# */
/* Updated: 2023/02/07 15:13:27 by apommier ### ########.fr */
/* Updated: 2023/02/09 13:19:51 by apommier ### ########.fr */
/* */
/* ************************************************************************** */
@ -15,12 +15,25 @@
// ERR_NONICKNAMEGIVEN ERR_ERRONEUSNICKNAME
// ERR_NICKNAMEINUSE ERR_NICKCOLLISION
void NICK(std::string buffer, fdList allFds, int user)
void NICK(std::string buffer, fdList &allFds, int userNbr)
{
std::vector<std::string> splitBuff;
split(buffer, ' ', splitBuff);
if (splitBuff.size() < 2)
{
cmd_error(allFds, allFds.userData[userNbr].fd, "431 * NICK :No nickname given\n");
//write(allFds.userData[user].fd, "ERR_NEEDMOREPARAMS", 18);
return ;
}
//if nickname ok then (another user has it? )
allFds.userData[user].nickname = splitBuff[1];
//ERR_NONICKNAMEGIVEN
allFds.userData[userNbr].nickname = splitBuff[1];
if (!allFds.userData[userNbr].registered && !allFds.userData[userNbr].userName.empty())
{
allFds.userData[userNbr].registered = 1;
print_registered_msg(allFds, userNbr);
}
return ;
}

View File

@ -6,33 +6,33 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2023/02/06 14:40:42 by apommier #+# #+# */
/* Updated: 2023/02/07 19:40:34 by apommier ### ########.fr */
/* Updated: 2023/02/09 13:20:00 by apommier ### ########.fr */
/* */
/* ************************************************************************** */
#include "../../../includes/ft_irc.hpp"
void PASS(std::string buffer, fdList allFds, int user)
void PASS(std::string buffer, fdList &allFds, int userNbr)
{
std::string password;
if (buffer.size() < 6)// ---PASS ---
{
cmd_error(allFds, user, "461 * PASS :Not enough parameters");
cmd_error(allFds, allFds.userData[userNbr].fd, "461 * PASS :Not enough parameters\n");
return ;
}
// if (splitBuff.size() != 2)
// {
// cmd_error(allFds, user, "461 * PASS :Not enough parameters");
// //write(allFds.userData[user].fd, "ERR_NEEDMOREPARAMS", 18);
// cmd_error(allFds, userNbr, "461 * PASS :Not enough parameters");
// //write(allFds.userData[userNbr].fd, "ERR_NEEDMOREPARAMS", 18);
// return ;
// }
else if (allFds.userData[user].registered)
else if (allFds.userData[userNbr].registered)
{
cmd_error(allFds, user, "462 * PASS :You may not reregister");
cmd_error(allFds, allFds.userData[userNbr].fd, "462 * PASS :You may not reregister\n");
return ;
}
password = buffer.substr(5, buffer.npos);
allFds.userData[user].password = buffer;
allFds.userData[userNbr].password = buffer;
}

View File

@ -6,7 +6,7 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2023/02/06 14:40:39 by apommier #+# #+# */
/* Updated: 2023/02/07 20:27:12 by apommier ### ########.fr */
/* Updated: 2023/02/09 13:19:53 by apommier ### ########.fr */
/* */
/* ************************************************************************** */
@ -16,25 +16,36 @@
//Paramètres: <nom d'utilisateur> <hôte> <nom de serveur> :<nom réel>
//ERR_NEEDMOREPARAMS ERR_ALREADYREGISTRED
void USER(std::string buffer, fdList allFds, int user)
void USER(std::string buffer, fdList &allFds, int userNbr)
{
if (allFds.userData[userNbr].registered == 1)
{
cmd_error(allFds, allFds.userData[userNbr].fd, "462 * PASS :You may not reregister\n");
return ;
}
std::string realName = buffer.substr(buffer.find_first_of(":") + 1 , buffer.npos);
std::vector<std::string> splitBuff;
buffer.resize(buffer.size() - realName.size());
std::cout << "Buffer in user = ---" << buffer << "---" << std::endl;
std::cout << "realname in user = ---" << realName << "---" << std::endl;
std::cout << "Buffer in userNbr = ---" << buffer << "---" << std::endl;
std::cout << "realname in userNbr = ---" << realName << "---" << std::endl;
split(buffer, ' ', splitBuff);
if (splitBuff.size() < 4)
{
cmd_error(allFds, user, "461 * PASS :Not enough parameters");
//write(allFds.userData[user].fd, "ERR_NEEDMOREPARAMS", 18);
cmd_error(allFds, allFds.userData[userNbr].fd, "461 * PASS :Not enough parameters\n");
//write(allFds.userData[userNbr].fd, "ERR_NEEDMOREPARAMS", 18);
return ;
}
allFds.userData[user].userName = splitBuff[1];
allFds.userData[user].hostName = splitBuff[2];
allFds.userData[user].serverName = splitBuff[3];
allFds.userData[user].realName = realName;
allFds.userData[userNbr].userName = splitBuff[1];
allFds.userData[userNbr].hostName = splitBuff[2];
allFds.userData[userNbr].serverName = splitBuff[3];
allFds.userData[userNbr].realName = realName;
if (!allFds.userData[userNbr].nickname.empty())
{
allFds.userData[userNbr].registered = 1;
print_registered_msg(allFds, userNbr);
}
}

View File

@ -6,16 +6,22 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2023/02/07 14:45:45 by apommier #+# #+# */
/* Updated: 2023/02/07 15:16:10 by apommier ### ########.fr */
/* Updated: 2023/02/09 14:01:23 by apommier ### ########.fr */
/* */
/* ************************************************************************** */
#include "../../../includes/ft_irc.hpp"
void cmd_error(fdList allFds, int user, std::string error)
void ft_putstr_fd(int fd, std::string str)
{
write(allFds.userData[user].fd, ":irc.local ", error.size());
write(allFds.userData[user].fd, error.c_str(), error.size());
write(fd, str.c_str(), str.size());
write(fd, "\n", 1);
}
void cmd_error(fdList &allFds, int fd, std::string error)
{
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)
@ -28,4 +34,20 @@ void split(std::string const &str, const char delim, std::vector<std::string> &o
end = str.find(delim, start);
out.push_back(str.substr(start, end - start));
}
}
}
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, "your nickname is |" + allFds.userData[userNbr].nickname );
ft_putstr_fd(allFds.userData[userNbr].fd, "your password is |" + allFds.userData[userNbr].password );
ft_putstr_fd(allFds.userData[userNbr].fd, "your username is |" + allFds.userData[userNbr].userName );
ft_putstr_fd(allFds.userData[userNbr].fd, "your realname is |" + allFds.userData[userNbr].realName );
ft_putstr_fd(allFds.userData[userNbr].fd, "your hostname is |" + allFds.userData[userNbr].hostName );
ft_putstr_fd(allFds.userData[userNbr].fd, "your servername is |" + allFds.userData[userNbr].serverName );
}
// void delete_client(fdList &allFds)
// {
// }

View File

@ -0,0 +1,13 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* join.cpp :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2023/02/09 15:40:33 by apommier #+# #+# */
/* Updated: 2023/02/09 15:40:41 by apommier ### ########.fr */
/* */
/* ************************************************************************** */
#include "../../../includes/ft_irc.hpp"

View File

@ -6,7 +6,7 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2022/12/06 22:01:25 by apommier #+# #+# */
/* Updated: 2023/02/07 15:18:41 by apommier ### ########.fr */
/* Updated: 2023/02/09 13:20:39 by apommier ### ########.fr */
/* */
/* ************************************************************************** */
@ -18,7 +18,7 @@ std::string ft_test()
return ("prout");
}
void parse_commands(std::string buffer, fdList allFds, int user)
void parse_commands(std::string buffer, fdList &allFds, int userNbr)
{
std::string cmd = buffer;
std::vector<std::string> splitBuff;
@ -32,7 +32,7 @@ void parse_commands(std::string buffer, fdList allFds, int user)
while (splitBuff[0] != allFds.parsingTab.cmdName[a] && a < allFds.parsingTab.cmdNbr)
a++;
if (a == allFds.parsingTab.cmdNbr)
std::cout << "Command not found\n";
std::cout << "Command not found\n";
else
allFds.parsingTab.cmdPtr[a](buffer, allFds, user);
allFds.parsingTab.cmdPtr[a](buffer, allFds, userNbr);
}

View File

@ -6,7 +6,7 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2022/12/01 17:27:33 by apommier #+# #+# */
/* Updated: 2022/12/09 23:46:24 by apommier ### ########.fr */
/* Updated: 2023/02/09 14:39:07 by apommier ### ########.fr */
/* */
/* ************************************************************************** */
@ -17,6 +17,14 @@ int main(int ac, char **av)
if (!(ac == 3 || ac == 2))
ft_error("wrong number of arguments\nFORMAT: ./ircserv <port> <password>");
std::cout << "============Homemade IRC Server start============" << std::endl;
// try
// {
// initialize(av);
// }
// catch
// {
// }
initialize(av);
return (0);
}

View File

@ -6,24 +6,56 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2022/12/09 22:26:27 by apommier #+# #+# */
/* Updated: 2023/02/07 11:41:38 by apommier ### ########.fr */
/* Updated: 2023/02/09 14:06:13 by apommier ### ########.fr */
/* */
/* ************************************************************************** */
#include "../includes/ft_irc.hpp"
void new_connection(fdList allFds, struct epoll_event newClient)
void new_connection(fdList &allFds, struct epoll_event newClient)
{
struct sockaddr_in addr;
int addrLen = sizeof(addr);
std::cout << "new connection !" << std::endl;
//std::cout << "in new adress " << &allFds << std::endl;
//std::cout << "new connection !" << std::endl;
if (MAX_EVENTS == allFds.nbrUser)
{
std::cout << "new connection refused, already full" << std::endl;
return ;
}
int newUserFd;
allFds.userList.push_back(newUserFd);
allFds.userList[allFds.nbrUser] = accept(allFds.serverFd, (struct sockaddr *)&addr, (socklen_t*)&addrLen);
std::cout << "newConnection | user fd = " << allFds.userList[allFds.nbrUser] << std::endl;
clientData newElement;
allFds.userData.push_back(newElement);
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++;
}
}
// 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++;
// }

View File

@ -6,49 +6,46 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2022/12/06 21:58:13 by apommier #+# #+# */
/* Updated: 2023/02/07 11:23:01 by apommier ### ########.fr */
/* Updated: 2023/02/09 15:02:44 by apommier ### ########.fr */
/* */
/* ************************************************************************** */
#include "../includes/ft_irc.hpp"
void start_loop(fdList allFds)
void start_loop(fdList &allFds)
{
bool alive = true;
char buffer[1024] = { 0 };
//struct epoll_event events[MAX_EVENTS];
int readChar;
int eventNbr;
int i;
int userId;
int nbr;
std::cout << "serverFd: " << allFds.serverFd << std::endl;
//allFds.events //= allFds.events;
while (alive)
{
// std::cout << "hehe\n";
// readChar = read(allFds.serverFd, buffer, 1024);
//recv(int allFds.serverFd, void *buf, size_t len, int flags);
//buffer[readChar] = '\0';
// send(clientFd, "message received", 18, 0);
eventNbr = epoll_wait(allFds.epollFd, allFds.events, MAX_EVENTS, 5000);
std::cout << "eventNbr: " << eventNbr << std::endl;
for (int i = 0; i < eventNbr ; i++)
//std::cout << "eventNbr: " << eventNbr << std::endl;
//std::cout << "in loop adress " << &allFds << std::endl;
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;
if (allFds.events[i].data.fd == allFds.serverFd)
new_connection(allFds, allFds.events[i]);
else if (!clientRequest(allFds, i))//allFds.events[i].data.fd))
{
alive = false;
//else
// std::cout << "F*CK i dont know" << std::endl;
//if (strncmp("QUIT", buffer, 4))
// alive = 0;
new_connection(allFds, allFds.events[i]);
//std::cout << "after new fd loop " << allFds.userData[i].fd << std::endl;
}
else
{
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, nbr))
alive = false;
}
}
if (!strncmp("/quit", buffer, 5))
std::cout << "quit message received\n";
}
std::cout << "dead server\n";

View File

@ -6,7 +6,7 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2022/12/06 21:44:20 by apommier #+# #+# */
/* Updated: 2023/02/06 12:32:07 by apommier ### ########.fr */
/* Updated: 2023/02/09 13:50:16 by apommier ### ########.fr */
/* */
/* ************************************************************************** */
@ -58,6 +58,7 @@ void initialize(char **av)
// }
allFds.epollFd = epoll_start();
//allFds.userData
epoll_add(allFds.epollFd, allFds.serverFd);
start_loop(allFds);