diff --git a/srcs/client.cpp b/srcs/client.cpp index 939ebae..86a1715 100644 --- a/srcs/client.cpp +++ b/srcs/client.cpp @@ -6,7 +6,7 @@ /* By: vvaas +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/01/21 10:35:52 by maldavid #+# #+# */ -/* Updated: 2024/01/30 00:10:23 by vvaas ### ########.fr */ +/* Updated: 2024/01/30 00:29:52 by maldavid ### ########.fr */ /* */ /******************************************************************************/ diff --git a/srcs/server.cpp b/srcs/server.cpp index dc72d89..b84c398 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/30 00:17:49 by vvaas ### ########.fr */ +/* Updated: 2024/01/30 00:26:39 by maldavid ### ########.fr */ /* */ /******************************************************************************/ @@ -85,6 +85,17 @@ namespace irc { logs::report(log_message, "User %d disconnected", (*it)->getID()); close((*it)->getFD()); + for(channel_it cit = _channels.begin(); cit != _channels.end();) + { + cit->removeClient(*it); + if(cit->getNumberOfClients() == 0) + { + logs::report(log_message, "channel '%s' has been destroyed", cit->getName().c_str()); + cit = _channels.erase(cit); + } + else + ++cit; + } it = _client.erase(it) - 1; } } diff --git a/srcs/server_functions.cpp b/srcs/server_functions.cpp index 13d0186..289818b 100644 --- a/srcs/server_functions.cpp +++ b/srcs/server_functions.cpp @@ -6,7 +6,7 @@ /* By: vvaas +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/01/22 17:31:06 by maldavid #+# #+# */ -/* Updated: 2024/01/30 00:25:13 by vvaas ### ########.fr */ +/* Updated: 2024/01/30 00:29:40 by maldavid ### ########.fr */ /* */ /******************************************************************************/ @@ -303,23 +303,22 @@ namespace irc logs::report(log_error, "INVITE, invalid command '%s'", msg.getRawMsg().c_str()); return; } - Channel* channel_target = getChannelByName(msg.getArgs()[1]); - if(channel_target == NULL) - { - client->sendCode(ERR_NOSUCHCHANNEL, "No such channel"); - return ; - } + if(!isUserKnown(msg.getArgs()[0])) { - client->sendCodeInChannel(ERR_NOSUCHNICK, *channel_target, "No such nick"); + client->sendCode(ERR_NOSUCHNICK, const_cast(msg.getArgs()[0]) + " no such nick"); return; } if(!isChannelKnown(msg.getArgs()[1])) { - client->sendCodeInChannel(ERR_NOSUCHCHANNEL, *channel_target, "no such channel"); + client->sendCode(ERR_NOSUCHCHANNEL, const_cast(msg.getArgs()[1]) + " no such channel"); return; } + Channel* channel_target = getChannelByName(msg.getArgs()[1]); + if(channel_target == NULL) + logs::report(log_fatal_error, "(INVITE), cannot get channel '%s' by name; panic !", msg.getArgs()[1].c_str()); + unstd::SharedPtr client_target = getClientByName(msg.getArgs()[0]); if(client_target.get() == NULL) logs::report(log_fatal_error, "(INVITE), cannot get client '%s' by name; panic !", msg.getArgs()[0].c_str());