From ff5a074d81e20a822e3e8c1bbc776ac08cad59b2 Mon Sep 17 00:00:00 2001 From: Raphael Date: Fri, 20 Jun 2025 17:11:53 +0200 Subject: [PATCH 1/2] fix(cmd): kick and topic in patch loading --- sources/commands/invite.cpp | 2 +- sources/commands/kick.cpp | 4 ++-- sources/commands/topic.cpp | 26 ++++++++++++++++++-------- 3 files changed, 21 insertions(+), 11 deletions(-) diff --git a/sources/commands/invite.cpp b/sources/commands/invite.cpp index 39994ce..7741638 100644 --- a/sources/commands/invite.cpp +++ b/sources/commands/invite.cpp @@ -6,7 +6,7 @@ /* By: sben-tay +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/05/24 17:29:48 by rparodi #+# #+# */ -/* Updated: 2025/06/19 13:53:17 by sben-tay ### ########.fr */ +/* Updated: 2025/06/20 16:57:53 by rparodi ### ########.fr */ /* */ /* ************************************************************************** */ diff --git a/sources/commands/kick.cpp b/sources/commands/kick.cpp index dcf8ebf..20c9289 100644 --- a/sources/commands/kick.cpp +++ b/sources/commands/kick.cpp @@ -6,7 +6,7 @@ /* By: sben-tay +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/05/24 17:29:48 by rparodi #+# #+# */ -/* Updated: 2025/06/20 16:47:40 by rparodi ### ########.fr */ +/* Updated: 2025/06/20 17:01:49 by rparodi ### ########.fr */ /* */ /* ************************************************************************** */ @@ -72,7 +72,7 @@ void Kick::execute() { msgKick += " :" + _args.at(4); msgKick += "\r\n"; - this->_sender->appendToWriteBuffer(msgKick + msgPart); + this->_uTarget->appendToWriteBuffer(msgKick + msgPart); _cTarget->removeUser(this->_uTarget); _cTarget->removeOperator(this->_uTarget); diff --git a/sources/commands/topic.cpp b/sources/commands/topic.cpp index c9379c9..a47aae1 100644 --- a/sources/commands/topic.cpp +++ b/sources/commands/topic.cpp @@ -6,7 +6,7 @@ /* By: sben-tay +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/05/24 17:29:48 by rparodi #+# #+# */ -/* Updated: 2025/06/18 12:51:40 by rparodi ### ########.fr */ +/* Updated: 2025/06/20 17:09:43 by rparodi ### ########.fr */ /* */ /* ************************************************************************** */ @@ -18,12 +18,18 @@ using namespace cmd; e_code Topic::checkArgs() { - if (_args.size() < 2) { + if (_args.size() < 3) { std::string msg461 = ":localhost 461 " + this->_sender->getNickname() + " " + this->_command + " :Not enough parameters\r\n"; this->_sender->appendToWriteBuffer(msg461); return ERR_NEEDMOREPARAMS; } - this->_cTarget = searchList(this->_channels, this->_args[1]); + if (_args.at(1).at(0) != '#') { + WARNING_MSG("Invalid channel name for KICK command"); + INFO_MSG("Channel names must start with a '#' character"); + return ERR_NOSUCHCHANNEL; + } else + _args.at(1).erase(0, 1); + this->_cTarget = searchList(this->_server->getChannelsList(), this->_args[1]); if (this->_cTarget == NULL) return ERR_NOSUCHCHANNEL; if (this->_cTarget->getProtectTopic()) { @@ -46,11 +52,15 @@ void Topic::execute() { ERROR_MSG("Invalid arguments for TOPIC command (see warning message)"); return; } - if (this->_cTarget->getTopic().empty()) { - std::string msg331 = ":localhost 331 " + this->_sender->getNickname() + " " + this->_cTarget->getName() + " :No topic is set" + "\r\n"; - this->_sender->appendToWriteBuffer(msg331); + if (this->_args.size() == 1) { + if (this->_cTarget->getTopic().empty()) { + std::string msg331 = ":localhost 331 " + this->_sender->getNickname() + " " + this->_cTarget->getName() + " :No topic is set" + "\r\n"; + this->_sender->appendToWriteBuffer(msg331); + } else { + std::string msg332 = ":localhost 332 " + this->_sender->getNickname() + " " + this->_cTarget->getName() + " :" + _cTarget->getTopic() + "\r\n"; + this->_sender->appendToWriteBuffer(msg332); + } } else { - std::string msg332 = ":localhost 332 " + this->_sender->getNickname() + " " + this->_cTarget->getName() + " :" + _cTarget->getTopic() + "\r\n"; - this->_sender->appendToWriteBuffer(msg332); + this->_cTarget->setTopic(this->_args.at(2)); } } From c4bde7d276a395bf7d57b3f896baed988a3e95d8 Mon Sep 17 00:00:00 2001 From: Samy Ben Tayeb Date: Fri, 20 Jun 2025 17:55:56 +0200 Subject: [PATCH 2/2] commands kick fixed, new command : topic finished --- sources/commands/topic.cpp | 18 ++++++++++++++---- sources/core/Server.cpp | 9 ++++++--- sources/user/user.cpp | 4 +++- 3 files changed, 23 insertions(+), 8 deletions(-) diff --git a/sources/commands/topic.cpp b/sources/commands/topic.cpp index a47aae1..84bc55a 100644 --- a/sources/commands/topic.cpp +++ b/sources/commands/topic.cpp @@ -6,7 +6,7 @@ /* By: sben-tay +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/05/24 17:29:48 by rparodi #+# #+# */ -/* Updated: 2025/06/20 17:09:43 by rparodi ### ########.fr */ +/* Updated: 2025/06/20 17:55:27 by sben-tay ### ########.fr */ /* */ /* ************************************************************************** */ @@ -52,15 +52,25 @@ void Topic::execute() { ERROR_MSG("Invalid arguments for TOPIC command (see warning message)"); return; } + if (this->_args.size() == 1) { if (this->_cTarget->getTopic().empty()) { - std::string msg331 = ":localhost 331 " + this->_sender->getNickname() + " " + this->_cTarget->getName() + " :No topic is set" + "\r\n"; + std::string msg331 = ":localhost 331 " + this->_sender->getNickname() + " " + this->_cTarget->getName() + " :No topic is set\r\n"; this->_sender->appendToWriteBuffer(msg331); } else { - std::string msg332 = ":localhost 332 " + this->_sender->getNickname() + " " + this->_cTarget->getName() + " :" + _cTarget->getTopic() + "\r\n"; + std::string msg332 = ":localhost 332 " + this->_sender->getNickname() + " " + this->_cTarget->getName() + " :" + this->_cTarget->getTopic() + "\r\n"; this->_sender->appendToWriteBuffer(msg332); } } else { - this->_cTarget->setTopic(this->_args.at(2)); + std::string newTopic; + for (size_t i = 2; i < this->_args.size(); ++i) { + newTopic += this->_args[i]; + if (i != this->_args.size() - 1) + newTopic += " "; + } + this->_cTarget->setTopic(newTopic); + + std::string topicMsg = ":" + this->_sender->getPrefix() + " TOPIC " + this->_cTarget->getName() + " :" + newTopic + "\r\n"; + this->_cTarget->sendAllClientInAChannel(topicMsg); } } diff --git a/sources/core/Server.cpp b/sources/core/Server.cpp index 0523a54..8aee714 100644 --- a/sources/core/Server.cpp +++ b/sources/core/Server.cpp @@ -6,7 +6,7 @@ /* By: sben-tay +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/05/13 11:11:07 by rparodi #+# #+# */ -/* Updated: 2025/06/19 02:24:05 by sben-tay ### ########.fr */ +/* Updated: 2025/06/20 15:13:42 by sben-tay ### ########.fr */ /* */ /* ************************************************************************** */ @@ -106,9 +106,11 @@ void Server::start() _users[fd]->appendToReadBuffer(data); std::string rawCmd; + DEBUG_MSG("cmd = " << _users[fd]->extractFullCommand()); while (!(rawCmd = _users[fd]->extractFullCommand()).empty()) { std::vector lines = splitLines(rawCmd); for (size_t i = 0; i < lines.size(); ++i) { + DEBUG_MSG("cmd = " << _users[fd]->extractFullCommand()); std::cout << "Client " << fd << " says: " << lines[i] << std::endl; cmd::dispatch(_users[fd], NULL, this, lines[i]); } @@ -126,8 +128,9 @@ void Server::start() std::cerr << "Erreur send sur fd " << fd << std::endl; disconnectClient(fd); } else { - _users[fd]->consumeWriteBuffer(bytesSent); - if (_users[fd]->getWriteBuffer().empty()) + _users[fd]->clearWriteBuffer(); + // _users[fd]->consumeWriteBuffer(bytesSent); + // if (_users[fd]->getWriteBuffer().empty()) _pollManager.setWritable(fd, false); } } diff --git a/sources/user/user.cpp b/sources/user/user.cpp index 11224da..cf97b7b 100644 --- a/sources/user/user.cpp +++ b/sources/user/user.cpp @@ -6,7 +6,7 @@ /* By: sben-tay +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/05/21 20:37:12 by omoudni #+# #+# */ -/* Updated: 2025/06/19 02:23:06 by sben-tay ### ########.fr */ +/* Updated: 2025/06/20 13:40:14 by sben-tay ### ########.fr */ /* */ /* ************************************************************************** */ @@ -123,6 +123,7 @@ std::string User::extractFullCommand() { if (pos != std::string::npos) { std::string command = _read_buffer.substr(0, pos); _read_buffer.erase(0, pos + 2); + DEBUG_MSG(command); return command; } @@ -130,6 +131,7 @@ std::string User::extractFullCommand() { if (pos != std::string::npos) { std::string command = _read_buffer.substr(0, pos); _read_buffer.erase(0, pos + 1); + DEBUG_MSG(command); return command; }