diff --git a/Makefile b/Makefile index 7034339..5c9aadf 100644 --- a/Makefile +++ b/Makefile @@ -6,7 +6,7 @@ # By: vvaas +#+ +:+ +#+ # # +#+#+#+#+#+ +#+ # # Created: 2023/08/09 15:08:49 by vavaas #+# #+# # -# Updated: 2024/01/21 19:57:45 by vvaas ### ########.fr # +# Updated: 2024/01/22 17:31:49 by maldavid ### ########.fr # # # #******************************************************************************# @@ -15,6 +15,7 @@ NAME = ircserv SRCS = srcs/main.cpp \ srcs/logs.cpp \ srcs/server.cpp \ + srcs/server_functions.cpp \ srcs/client.cpp \ srcs/channel.cpp \ srcs/message.cpp \ diff --git a/includes/server.hpp b/includes/server.hpp index 4c5225e..3e2afb2 100644 --- a/includes/server.hpp +++ b/includes/server.hpp @@ -6,7 +6,7 @@ /* By: vvaas +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/01/21 09:12:28 by maldavid #+# #+# */ -/* Updated: 2024/01/22 17:21:23 by vvaas ### ########.fr */ +/* Updated: 2024/01/22 17:30:47 by maldavid ### ########.fr */ /* */ /******************************************************************************/ @@ -28,7 +28,7 @@ namespace irc public: Server(int port, const std::string& password); - inline void closeMainSocket() { if (_main_socket > 0) close(_main_socket); _main_socket = 0; _active = false; } + inline void closeMainSocket() { close(_main_socket); _main_socket = 0; _active = false; } void wait(); ~Server(); diff --git a/srcs/server.cpp b/srcs/server.cpp index d56c73b..28ddc93 100644 --- a/srcs/server.cpp +++ b/srcs/server.cpp @@ -6,7 +6,7 @@ /* By: vvaas +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/01/21 09:31:17 by maldavid #+# #+# */ -/* Updated: 2024/01/22 17:23:23 by vvaas ### ########.fr */ +/* Updated: 2024/01/22 17:31:00 by maldavid ### ########.fr */ /* */ /******************************************************************************/ @@ -156,162 +156,9 @@ namespace irc return true; } - void Server::handleNick(unstd::SharedPtr client, const Message& msg) - { - // TODO : handle nick collisions - if(msg.getTokens().size() != 2 && msg.getTokens().size() != 3) - { - logs::report(log_error, "NICK, invalid command '%s'", msg.getRawMsg().c_str()); - return; - } - client->printUserHeader(); - client->setNewNickName(msg.getTokens()[1]); - std::cout << "new nickname, " << client->getNickName() << std::endl; - } - - void Server::handleUser(unstd::SharedPtr client, const Message& msg) - { - if(msg.getTokens().size() != 5) - { - logs::report(log_error, "USER, invalid command '%s'", msg.getRawMsg().c_str()); - return; - } - client->printUserHeader(); - client->setNewUserName(msg.getTokens()[1]); - std::cout << "new username, " << client->getUserName() << std::endl; - - //client->printUserHeader(); - //client->setNewRealName(msg.getTokens()[1]); - //std::cout << "new realname, " << client->getRealName() << std::endl; - } - - void Server::handleQuit(unstd::SharedPtr client, const Message& msg) - { - (void)msg; - client->printUserHeader(); - std::cout << "quit" << std::endl; - } - - void Server::handlePart(unstd::SharedPtr client, const Message& msg) - { - if(msg.getTokens().size() < 2 && msg.getTokens().size() > 3) - { - logs::report(log_error, "PART, invalid command '%s'", msg.getRawMsg().c_str()); - return; - } - if(msg.getTokens()[1][0] != '#' && msg.getTokens()[1][0] != '&') - { - logs::report(log_error, "PART, invalid channel name '%s'", msg.getTokens()[1].c_str()); - return; - } - - for(std::string::const_iterator it = msg.getTokens()[1].begin(); it != msg.getTokens()[1].end(); ++it) - { - if((it == msg.getTokens()[1].begin() || *(it - 1) == ',') && std::strchr("&#", *it) == NULL) - { - logs::report(log_error, "PART, invalid channel name '%s'", msg.getTokens()[1].c_str()); - return; - } - } - - std::vector::iterator chit; - for(chit = _channels.begin(); chit != _channels.end(); ++chit) - { - if(msg.getTokens()[1] == chit->getName()) - break; - } - if(chit == _channels.end()) - { - logs::report(log_error, "PART, channel not found '%s'", msg.getTokens()[1].c_str()); - return; - } - if(!chit->removeClient(client)) - { - logs::report(log_error, "PART, client was not in channel '%s'", msg.getTokens()[1].c_str()); - return; - } - client->printUserHeader(); - std::cout << "leaving channel, " << msg.getTokens()[1] << std::endl; - if(chit->getNumberOfClients() == 0) - logs::report(log_message, "channel '%s' has beed destroyed", chit->getName().c_str()); - } - - void Server::handleJoin(unstd::SharedPtr client, const Message& msg) - { - if(msg.getTokens().size() < 2 && msg.getTokens().size() > 3) - { - logs::report(log_error, "JOIN, invalid command '%s'", msg.getRawMsg().c_str()); - return; - } - if(msg.getTokens()[1][0] != '#' && msg.getTokens()[1][0] != '&') - { - logs::report(log_error, "JOIN, invalid channel name '%s'", msg.getTokens()[1].c_str()); - return; - } - - std::vector::iterator it; - for(it = _channels.begin(); it != _channels.end(); ++it) - { - if(msg.getTokens()[1] == it->getName()) - break; - } - if(it == _channels.end()) - { - _channels.push_back(Channel(msg.getTokens()[1])); - logs::report(log_message, "channel '%s' has beed created", msg.getTokens()[1].c_str()); - _channels.back().addClient(client); - } - else - it->addClient(client); - client->printUserHeader(); - std::cout << "joining new channel, " << msg.getTokens()[1] << std::endl; - } - - void Server::handlePrivMsg(unstd::SharedPtr client, const Message& msg) - { - (void)client; - (void)msg; - } - - void Server::handleNotice(unstd::SharedPtr client, const Message& msg) - { - (void)client; - (void)msg; - } - - void Server::handleKick(unstd::SharedPtr client, const Message& msg) - { - (void)client; - (void)msg; - } - - void Server::handleMotD(unstd::SharedPtr client, const Message& msg) - { - (void)client; - (void)msg; - } - - void Server::handleTopic(unstd::SharedPtr client, const Message& msg) - { - (void)client; - (void)msg; - } - - void Server::handlePing(unstd::SharedPtr client, const Message& msg) - { - (void)client; - (void)msg; - } - - void Server::handleMode(unstd::SharedPtr client, const Message& msg) - { - (void)client; - (void)msg; - } - Server::~Server() { - if (_main_socket > 0) + if(_main_socket > 0) close(_main_socket); } } diff --git a/srcs/server_functions.cpp b/srcs/server_functions.cpp new file mode 100644 index 0000000..8f4752a --- /dev/null +++ b/srcs/server_functions.cpp @@ -0,0 +1,180 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* server_functions.cpp :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: maldavid +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/01/22 17:31:06 by maldavid #+# #+# */ +/* Updated: 2024/01/22 17:31:28 by maldavid ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace irc +{ + void Server::handleNick(unstd::SharedPtr client, const Message& msg) + { + // TODO : handle nick collisions + if(msg.getTokens().size() != 2 && msg.getTokens().size() != 3) + { + logs::report(log_error, "NICK, invalid command '%s'", msg.getRawMsg().c_str()); + return; + } + client->printUserHeader(); + client->setNewNickName(msg.getTokens()[1]); + std::cout << "new nickname, " << client->getNickName() << std::endl; + } + + void Server::handleUser(unstd::SharedPtr client, const Message& msg) + { + if(msg.getTokens().size() != 5) + { + logs::report(log_error, "USER, invalid command '%s'", msg.getRawMsg().c_str()); + return; + } + client->printUserHeader(); + client->setNewUserName(msg.getTokens()[1]); + std::cout << "new username, " << client->getUserName() << std::endl; + + //client->printUserHeader(); + //client->setNewRealName(msg.getTokens()[1]); + //std::cout << "new realname, " << client->getRealName() << std::endl; + } + + void Server::handleQuit(unstd::SharedPtr client, const Message& msg) + { + (void)msg; + client->printUserHeader(); + std::cout << "quit" << std::endl; + } + + void Server::handlePart(unstd::SharedPtr client, const Message& msg) + { + if(msg.getTokens().size() < 2 && msg.getTokens().size() > 3) + { + logs::report(log_error, "PART, invalid command '%s'", msg.getRawMsg().c_str()); + return; + } + if(msg.getTokens()[1][0] != '#' && msg.getTokens()[1][0] != '&') + { + logs::report(log_error, "PART, invalid channel name '%s'", msg.getTokens()[1].c_str()); + return; + } + + for(std::string::const_iterator it = msg.getTokens()[1].begin(); it != msg.getTokens()[1].end(); ++it) + { + if((it == msg.getTokens()[1].begin() || *(it - 1) == ',') && std::strchr("&#", *it) == NULL) + { + logs::report(log_error, "PART, invalid channel name '%s'", msg.getTokens()[1].c_str()); + return; + } + } + + std::vector::iterator chit; + for(chit = _channels.begin(); chit != _channels.end(); ++chit) + { + if(msg.getTokens()[1] == chit->getName()) + break; + } + if(chit == _channels.end()) + { + logs::report(log_error, "PART, channel not found '%s'", msg.getTokens()[1].c_str()); + return; + } + if(!chit->removeClient(client)) + { + logs::report(log_error, "PART, client was not in channel '%s'", msg.getTokens()[1].c_str()); + return; + } + client->printUserHeader(); + std::cout << "leaving channel, " << msg.getTokens()[1] << std::endl; + if(chit->getNumberOfClients() == 0) + logs::report(log_message, "channel '%s' has beed destroyed", chit->getName().c_str()); + } + + void Server::handleJoin(unstd::SharedPtr client, const Message& msg) + { + if(msg.getTokens().size() < 2 && msg.getTokens().size() > 3) + { + logs::report(log_error, "JOIN, invalid command '%s'", msg.getRawMsg().c_str()); + return; + } + if(msg.getTokens()[1][0] != '#' && msg.getTokens()[1][0] != '&') + { + logs::report(log_error, "JOIN, invalid channel name '%s'", msg.getTokens()[1].c_str()); + return; + } + + std::vector::iterator it; + for(it = _channels.begin(); it != _channels.end(); ++it) + { + if(msg.getTokens()[1] == it->getName()) + break; + } + if(it == _channels.end()) + { + _channels.push_back(Channel(msg.getTokens()[1])); + logs::report(log_message, "channel '%s' has beed created", msg.getTokens()[1].c_str()); + _channels.back().addClient(client); + } + else + it->addClient(client); + client->printUserHeader(); + std::cout << "joining new channel, " << msg.getTokens()[1] << std::endl; + } + + void Server::handlePrivMsg(unstd::SharedPtr client, const Message& msg) + { + (void)client; + (void)msg; + } + + void Server::handleNotice(unstd::SharedPtr client, const Message& msg) + { + (void)client; + (void)msg; + } + + void Server::handleKick(unstd::SharedPtr client, const Message& msg) + { + (void)client; + (void)msg; + } + + void Server::handleMotD(unstd::SharedPtr client, const Message& msg) + { + (void)client; + (void)msg; + } + + void Server::handleTopic(unstd::SharedPtr client, const Message& msg) + { + (void)client; + (void)msg; + } + + void Server::handlePing(unstd::SharedPtr client, const Message& msg) + { + (void)client; + (void)msg; + } + + void Server::handleMode(unstd::SharedPtr client, const Message& msg) + { + (void)client; + (void)msg; + } +}