diff --git a/ft_irc3/includes/Client.hpp b/ft_irc3/includes/Client.hpp index 364d67b..9b57ee9 100644 --- a/ft_irc3/includes/Client.hpp +++ b/ft_irc3/includes/Client.hpp @@ -43,6 +43,9 @@ public: void setAway(bool away); std::string getKey() const; void setkey(const std::string &key); + + char buffer[1024]; + char buffer2[1024]; private: int _fd; diff --git a/ft_irc3/includes/ClientManager.hpp b/ft_irc3/includes/ClientManager.hpp index ae6f457..e813ab4 100644 --- a/ft_irc3/includes/ClientManager.hpp +++ b/ft_irc3/includes/ClientManager.hpp @@ -42,6 +42,7 @@ class ClientManager public: ClientManager(Server *server); void acceptClient(); + void handleClientNext(int client_fd, char * buffer, int bytes_received); void handleClient(int client_fd); void removeClient(int client_fd); diff --git a/ft_irc3/includes/Server.hpp b/ft_irc3/includes/Server.hpp index ba21a90..312daaf 100644 --- a/ft_irc3/includes/Server.hpp +++ b/ft_irc3/includes/Server.hpp @@ -59,7 +59,6 @@ class Server void broadcast(const std::string &message); Client* getClientByName(const std::string &name); Channel* getChannelByName(const std::string &name); - void sendChannelListToClient(Client *client); void disconnectClient(int clientFd); bool MatchFd(const pollfd& pfd, int clientFd); void removePollFd(int clientFd); diff --git a/ft_irc3/ircserv b/ft_irc3/ircserv new file mode 100644 index 0000000..6ecaaa0 Binary files /dev/null and b/ft_irc3/ircserv differ diff --git a/ft_irc3/logs/irc_server.log b/ft_irc3/logs/irc_server.log new file mode 100644 index 0000000..e69de29 diff --git a/ft_irc3/obj/AdditionalCommands.o b/ft_irc3/obj/AdditionalCommands.o new file mode 100644 index 0000000..e5a4310 Binary files /dev/null and b/ft_irc3/obj/AdditionalCommands.o differ diff --git a/ft_irc3/obj/Channel.o b/ft_irc3/obj/Channel.o new file mode 100644 index 0000000..83a3f88 Binary files /dev/null and b/ft_irc3/obj/Channel.o differ diff --git a/ft_irc3/obj/Client.o b/ft_irc3/obj/Client.o new file mode 100644 index 0000000..a5ee1a3 Binary files /dev/null and b/ft_irc3/obj/Client.o differ diff --git a/ft_irc3/obj/ClientManager.o b/ft_irc3/obj/ClientManager.o new file mode 100644 index 0000000..654e37d Binary files /dev/null and b/ft_irc3/obj/ClientManager.o differ diff --git a/ft_irc3/obj/CommandHandler.o b/ft_irc3/obj/CommandHandler.o new file mode 100644 index 0000000..5c41ecd Binary files /dev/null and b/ft_irc3/obj/CommandHandler.o differ diff --git a/ft_irc3/obj/InviteHandler.o b/ft_irc3/obj/InviteHandler.o new file mode 100644 index 0000000..221f7c9 Binary files /dev/null and b/ft_irc3/obj/InviteHandler.o differ diff --git a/ft_irc3/obj/Join.o b/ft_irc3/obj/Join.o new file mode 100644 index 0000000..d38b698 Binary files /dev/null and b/ft_irc3/obj/Join.o differ diff --git a/ft_irc3/obj/KickHandler.o b/ft_irc3/obj/KickHandler.o new file mode 100644 index 0000000..24e6329 Binary files /dev/null and b/ft_irc3/obj/KickHandler.o differ diff --git a/ft_irc3/obj/ModeHandler.o b/ft_irc3/obj/ModeHandler.o new file mode 100644 index 0000000..7e5766b Binary files /dev/null and b/ft_irc3/obj/ModeHandler.o differ diff --git a/ft_irc3/obj/Server.o b/ft_irc3/obj/Server.o new file mode 100644 index 0000000..bde9d6d Binary files /dev/null and b/ft_irc3/obj/Server.o differ diff --git a/ft_irc3/obj/TopicHandler.o b/ft_irc3/obj/TopicHandler.o new file mode 100644 index 0000000..8c3eb37 Binary files /dev/null and b/ft_irc3/obj/TopicHandler.o differ diff --git a/ft_irc3/obj/Utils.o b/ft_irc3/obj/Utils.o new file mode 100644 index 0000000..31bf36e Binary files /dev/null and b/ft_irc3/obj/Utils.o differ diff --git a/ft_irc3/obj/Welcome.o b/ft_irc3/obj/Welcome.o new file mode 100644 index 0000000..5660ab1 Binary files /dev/null and b/ft_irc3/obj/Welcome.o differ diff --git a/ft_irc3/obj/Who.o b/ft_irc3/obj/Who.o new file mode 100644 index 0000000..97ebb4f Binary files /dev/null and b/ft_irc3/obj/Who.o differ diff --git a/ft_irc3/obj/main.o b/ft_irc3/obj/main.o new file mode 100644 index 0000000..9e26c52 Binary files /dev/null and b/ft_irc3/obj/main.o differ diff --git a/ft_irc3/src/AdditionalCommands.cpp b/ft_irc3/src/AdditionalCommands.cpp index 0106dcb..addb304 100644 --- a/ft_irc3/src/AdditionalCommands.cpp +++ b/ft_irc3/src/AdditionalCommands.cpp @@ -65,7 +65,7 @@ void AdditionalCommands::broadcastChannelList(Client *client, Server *server) std::map &channels = server->getChannels(); for (std::map::iterator it = channels.begin(); it != channels.end(); ++it) { - server->sendToClient(client->getFd(), RPL_LIST(client, it->first, it->second->getClients().size(), "Existing channel")); + server->sendToClient(client->getFd(), RPL_LIST(client, it->first, it->second->getClients().size(), it->second->getTopic())); } server->sendToClient(client->getFd(), RPL_LISTEND(client)); } diff --git a/ft_irc3/src/ClientManager.cpp b/ft_irc3/src/ClientManager.cpp index d4e637a..35e85b6 100644 --- a/ft_irc3/src/ClientManager.cpp +++ b/ft_irc3/src/ClientManager.cpp @@ -38,10 +38,13 @@ void ClientManager::acceptClient() void ClientManager::handleClient(int client_fd) { - char buffer[1024]; - std::memset(buffer, 0, sizeof(buffer)); - int bytes_received = recv(client_fd, buffer, sizeof(buffer), 0); - + Client* client = _server->getClients()[client_fd]; + // char buffer[1024]; + // char buffer2[1024]; + + std::memset(client->buffer, 0, sizeof(client->buffer)); + int bytes_received = recv(client_fd, client->buffer, sizeof(client->buffer), 0); + if (bytes_received <= 0) { std::ostringstream oss; @@ -51,6 +54,34 @@ void ClientManager::handleClient(int client_fd) return; } + std::cout << std::string(client->buffer).size() << " client->buffer " << std::string(client->buffer).find('\n') << std::endl; + + for (size_t i = 0; client->buffer[i];i++) + { + std::cout << client->buffer[i] << " .. "; + } + std::cout << std::endl; + + if (std::string(client->buffer).find('\n') != std::string::npos) + { + strcat(client->buffer2, client->buffer); + handleClientNext(client_fd, client->buffer2, std::string(client->buffer2).size()); + std::memset(client->buffer2, 0, std::string(client->buffer2).size()); + } + else + { + strcat(client->buffer2, client->buffer); + for (size_t i = 0; client->buffer2[i];i++) + { + std::cout << client->buffer2[i] << " . "; + } + } + std::cout << std::endl; +} + + +void ClientManager::handleClientNext(int client_fd, char * buffer, int bytes_received) +{ std::string message(buffer, bytes_received); std::ostringstream oss; oss << "Received from client " << client_fd << ": " << message; diff --git a/ft_irc3/src/CommandHandler.cpp b/ft_irc3/src/CommandHandler.cpp index 99a4085..6dc4165 100644 --- a/ft_irc3/src/CommandHandler.cpp +++ b/ft_irc3/src/CommandHandler.cpp @@ -201,7 +201,8 @@ void CommandHandler::handleNick(Client* client, const std::vector& std::string nickMessage = ":" + oldNick + " NICK " + newNick + "\r\n"; for (std::map::iterator it = _server->_clients.begin(); it != _server->_clients.end(); ++it) { - _server->sendToClient(it->second->getFd(), nickMessage); + if (it->second->isAuthenticated()) + _server->sendToClient(it->second->getFd(), nickMessage); } std::ostringstream oss; diff --git a/ft_irc3/src/Server.cpp b/ft_irc3/src/Server.cpp index 5e4439c..6af927e 100644 --- a/ft_irc3/src/Server.cpp +++ b/ft_irc3/src/Server.cpp @@ -218,16 +218,6 @@ Channel* Server::getChannelByName(const std::string &name) return NULL; } -void Server::sendChannelListToClient(Client *client) -{ - std::map &channels = getChannels(); - for (std::map::iterator it = channels.begin(); it != channels.end(); ++it) - { - sendToClient(client->getFd(), RPL_LIST(client, it->first, it->second->getClients().size(), "Existing channel")); - } - sendToClient(client->getFd(), RPL_LISTEND(client)); -} - bool Server::MatchFd(const pollfd& pfd, int clientFd) { return pfd.fd == clientFd;