gg
This commit is contained in:
@@ -6,7 +6,7 @@
|
||||
/* By: vvaas <vvaas@student.42angouleme.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2024/01/21 10:35:52 by maldavid #+# #+# */
|
||||
/* Updated: 2024/01/29 21:18:33 by vvaas ### ########.fr */
|
||||
/* Updated: 2024/01/29 23:10:37 by vvaas ### ########.fr */
|
||||
/* */
|
||||
/******************************************************************************/
|
||||
|
||||
@@ -119,11 +119,22 @@ namespace irc
|
||||
std::string Client::getNextMsg()
|
||||
{
|
||||
std::size_t finder = _msg_in_flight.find("\r\n");
|
||||
if(finder == std::string::npos)
|
||||
logs::report(log_fatal_error, "client %d [getNextMsg()] : cannot get any other message, panic !", _id);
|
||||
std::string msg = _msg_in_flight.substr(0, finder);
|
||||
_msg_in_flight = _msg_in_flight.substr(finder + 2);
|
||||
return msg;
|
||||
if(finder != std::string::npos)
|
||||
{
|
||||
std::string msg = _msg_in_flight.substr(0, finder);
|
||||
_msg_in_flight = _msg_in_flight.substr(finder + 2);
|
||||
return msg;
|
||||
}
|
||||
finder = _msg_in_flight.find("\n");
|
||||
if(finder != std::string::npos)
|
||||
{
|
||||
std::string msg = _msg_in_flight.substr(0, finder);
|
||||
_msg_in_flight = _msg_in_flight.substr(finder + 1);
|
||||
return msg;
|
||||
}
|
||||
logs::report(log_warning, "Incomplete data type");
|
||||
_msg_in_flight.clear();
|
||||
return (std::string());
|
||||
}
|
||||
|
||||
Client::~Client() {}
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
/* By: vvaas <vvaas@student.42angouleme.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2024/01/21 09:31:17 by maldavid #+# #+# */
|
||||
/* Updated: 2024/01/29 22:10:26 by vvaas ### ########.fr */
|
||||
/* Updated: 2024/01/29 23:09:30 by vvaas ### ########.fr */
|
||||
/* */
|
||||
/******************************************************************************/
|
||||
|
||||
@@ -67,13 +67,12 @@ namespace irc
|
||||
void Server::handleInput()
|
||||
{
|
||||
char buffer[INPUT_SIZE] = { 0 };
|
||||
|
||||
ssize_t recv_size;
|
||||
for(std::vector<unstd::SharedPtr<Client> >::iterator it = _client.begin(); it != _client.end(); ++it)
|
||||
{
|
||||
if(!FD_ISSET((*it)->getFD(), &_fd_set))
|
||||
continue;
|
||||
|
||||
while(recv((*it)->getFD(), buffer, INPUT_SIZE, 0) > 0) // read() but for socket fd
|
||||
while((recv_size = recv((*it)->getFD(), buffer, INPUT_SIZE, 0)) > 0) // read() but for socket fd
|
||||
{
|
||||
(*it)->newMsgInFlight(buffer);
|
||||
#ifdef DEBUG
|
||||
@@ -82,8 +81,7 @@ namespace irc
|
||||
while(handleMessage(*it));
|
||||
std::memset(buffer, 0, sizeof(buffer)); // clear the buffer to avoid trash remaining
|
||||
}
|
||||
|
||||
if(recv((*it)->getFD(), buffer, INPUT_SIZE, 0) == 0 || (*it)->disconnectRequired()) // recv return 0 if an user disconnect
|
||||
if(recv_size == 0 || (*it)->disconnectRequired()) // recv return 0 if an user disconnect
|
||||
{
|
||||
logs::report(log_message, "User %d disconnected", (*it)->getID());
|
||||
close((*it)->getFD());
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
/* By: vvaas <vvaas@student.42angouleme.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2024/01/22 17:31:06 by maldavid #+# #+# */
|
||||
/* Updated: 2024/01/29 21:32:24 by vvaas ### ########.fr */
|
||||
/* Updated: 2024/01/29 23:16:50 by vvaas ### ########.fr */
|
||||
/* */
|
||||
/******************************************************************************/
|
||||
|
||||
@@ -221,6 +221,11 @@ namespace irc
|
||||
{
|
||||
if(msg.getTokens()[1] == it->getName())
|
||||
{
|
||||
if (!it->hasClient(client))
|
||||
{
|
||||
client->sendCode(ERR_CANNOTSENDTOCHAN, "You are not in the channel");
|
||||
return ;
|
||||
}
|
||||
std::string complete_msg;
|
||||
if(msg.getTokens().size() > 2)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user