From aaa1457b61ef11d782f9dc5f9c72eed9c26af353 Mon Sep 17 00:00:00 2001 From: Ladebeze66 Date: Thu, 16 May 2024 23:31:03 +0200 Subject: [PATCH] dede --- ft_irc3/.vscode/c_cpp_properties.json | 18 ++ ft_irc3/.vscode/launch.json | 24 +++ ft_irc3/.vscode/settings.json | 110 ++++++++++ ft_irc3/Makefile | 46 ++++ ft_irc3/includes/AdditionalCommands.hpp | 32 +++ ft_irc3/includes/Channel.hpp | 38 ++++ ft_irc3/includes/Client.hpp | 49 +++++ ft_irc3/includes/ClientManager.hpp | 45 ++++ ft_irc3/includes/CommandHandler.hpp | 41 ++++ ft_irc3/includes/Server.hpp | 76 +++++++ ft_irc3/includes/Utils.hpp | 30 +++ ft_irc3/ircserv | Bin 0 -> 173040 bytes ft_irc3/logs/irc_server.log | 0 ft_irc3/obj/AdditionalCommands.o | Bin 0 -> 144664 bytes ft_irc3/obj/Channel.o | Bin 0 -> 50944 bytes ft_irc3/obj/Client.o | Bin 0 -> 4440 bytes ft_irc3/obj/ClientManager.o | Bin 0 -> 121080 bytes ft_irc3/obj/CommandHandler.o | Bin 0 -> 117840 bytes ft_irc3/obj/Server.o | Bin 0 -> 105360 bytes ft_irc3/obj/Utils.o | Bin 0 -> 37984 bytes ft_irc3/obj/main.o | Bin 0 -> 4840 bytes ft_irc3/src/AdditionalCommands.cpp | 108 ++++++++++ ft_irc3/src/Channel.cpp | 49 +++++ ft_irc3/src/Client.cpp | 104 +++++++++ ft_irc3/src/ClientManager.cpp | 110 ++++++++++ ft_irc3/src/CommandHandler.cpp | 152 +++++++++++++ ft_irc3/src/Server.cpp | 273 ++++++++++++++++++++++++ ft_irc3/src/Utils.cpp | 37 ++++ ft_irc3/src/main.cpp | 33 +++ 29 files changed, 1375 insertions(+) create mode 100644 ft_irc3/.vscode/c_cpp_properties.json create mode 100644 ft_irc3/.vscode/launch.json create mode 100644 ft_irc3/.vscode/settings.json create mode 100644 ft_irc3/Makefile create mode 100644 ft_irc3/includes/AdditionalCommands.hpp create mode 100644 ft_irc3/includes/Channel.hpp create mode 100644 ft_irc3/includes/Client.hpp create mode 100644 ft_irc3/includes/ClientManager.hpp create mode 100644 ft_irc3/includes/CommandHandler.hpp create mode 100644 ft_irc3/includes/Server.hpp create mode 100644 ft_irc3/includes/Utils.hpp create mode 100755 ft_irc3/ircserv create mode 100644 ft_irc3/logs/irc_server.log create mode 100644 ft_irc3/obj/AdditionalCommands.o create mode 100644 ft_irc3/obj/Channel.o create mode 100644 ft_irc3/obj/Client.o create mode 100644 ft_irc3/obj/ClientManager.o create mode 100644 ft_irc3/obj/CommandHandler.o create mode 100644 ft_irc3/obj/Server.o create mode 100644 ft_irc3/obj/Utils.o create mode 100644 ft_irc3/obj/main.o create mode 100644 ft_irc3/src/AdditionalCommands.cpp create mode 100644 ft_irc3/src/Channel.cpp create mode 100644 ft_irc3/src/Client.cpp create mode 100644 ft_irc3/src/ClientManager.cpp create mode 100644 ft_irc3/src/CommandHandler.cpp create mode 100644 ft_irc3/src/Server.cpp create mode 100644 ft_irc3/src/Utils.cpp create mode 100644 ft_irc3/src/main.cpp diff --git a/ft_irc3/.vscode/c_cpp_properties.json b/ft_irc3/.vscode/c_cpp_properties.json new file mode 100644 index 0000000..c2098a2 --- /dev/null +++ b/ft_irc3/.vscode/c_cpp_properties.json @@ -0,0 +1,18 @@ +{ + "configurations": [ + { + "name": "linux-gcc-x64", + "includePath": [ + "${workspaceFolder}/**" + ], + "compilerPath": "/usr/bin/gcc", + "cStandard": "${default}", + "cppStandard": "${default}", + "intelliSenseMode": "linux-gcc-x64", + "compilerArgs": [ + "" + ] + } + ], + "version": 4 +} \ No newline at end of file diff --git a/ft_irc3/.vscode/launch.json b/ft_irc3/.vscode/launch.json new file mode 100644 index 0000000..670f779 --- /dev/null +++ b/ft_irc3/.vscode/launch.json @@ -0,0 +1,24 @@ +{ + "version": "0.2.0", + "configurations": [ + { + "name": "C/C++ Runner: Debug Session", + "type": "cppdbg", + "request": "launch", + "args": [], + "stopAtEntry": false, + "externalConsole": false, + "cwd": "/home/fgras-ca/Bureau/ft_irc3/src", + "program": "/home/fgras-ca/Bureau/ft_irc3/src/build/Debug/outDebug", + "MIMode": "gdb", + "miDebuggerPath": "gdb", + "setupCommands": [ + { + "description": "Enable pretty-printing for gdb", + "text": "-enable-pretty-printing", + "ignoreFailures": true + } + ] + } + ] +} \ No newline at end of file diff --git a/ft_irc3/.vscode/settings.json b/ft_irc3/.vscode/settings.json new file mode 100644 index 0000000..137f792 --- /dev/null +++ b/ft_irc3/.vscode/settings.json @@ -0,0 +1,110 @@ +{ + "files.associations": { + "array": "cpp", + "atomic": "cpp", + "bit": "cpp", + "*.tcc": "cpp", + "cctype": "cpp", + "clocale": "cpp", + "cmath": "cpp", + "compare": "cpp", + "concepts": "cpp", + "cstdarg": "cpp", + "cstddef": "cpp", + "cstdint": "cpp", + "cstdio": "cpp", + "cstdlib": "cpp", + "cstring": "cpp", + "cwchar": "cpp", + "cwctype": "cpp", + "deque": "cpp", + "map": "cpp", + "string": "cpp", + "unordered_map": "cpp", + "vector": "cpp", + "exception": "cpp", + "algorithm": "cpp", + "functional": "cpp", + "iterator": "cpp", + "memory": "cpp", + "memory_resource": "cpp", + "numeric": "cpp", + "random": "cpp", + "string_view": "cpp", + "system_error": "cpp", + "tuple": "cpp", + "type_traits": "cpp", + "utility": "cpp", + "fstream": "cpp", + "initializer_list": "cpp", + "iosfwd": "cpp", + "iostream": "cpp", + "istream": "cpp", + "limits": "cpp", + "new": "cpp", + "numbers": "cpp", + "ostream": "cpp", + "sstream": "cpp", + "stdexcept": "cpp", + "streambuf": "cpp", + "typeinfo": "cpp", + "list": "cpp" +}, + "C_Cpp_Runner.cCompilerPath": "gcc", + "C_Cpp_Runner.cppCompilerPath": "g++", + "C_Cpp_Runner.debuggerPath": "gdb", + "C_Cpp_Runner.cStandard": "", + "C_Cpp_Runner.cppStandard": "", + "C_Cpp_Runner.msvcBatchPath": "", + "C_Cpp_Runner.useMsvc": false, + "C_Cpp_Runner.warnings": [ + "-Wall", + "-Wextra", + "-Wpedantic", + "-Wshadow", + "-Wformat=2", + "-Wcast-align", + "-Wconversion", + "-Wsign-conversion", + "-Wnull-dereference" + ], + "C_Cpp_Runner.msvcWarnings": [ + "/W4", + "/permissive-", + "/w14242", + "/w14287", + "/w14296", + "/w14311", + "/w14826", + "/w44062", + "/w44242", + "/w14905", + "/w14906", + "/w14263", + "/w44265", + "/w14928" + ], + "C_Cpp_Runner.enableWarnings": true, + "C_Cpp_Runner.warningsAsError": false, + "C_Cpp_Runner.compilerArgs": [], + "C_Cpp_Runner.linkerArgs": [], + "C_Cpp_Runner.includePaths": [], + "C_Cpp_Runner.includeSearch": [ + "*", + "**/*" + ], + "C_Cpp_Runner.excludeSearch": [ + "**/build", + "**/build/**", + "**/.*", + "**/.*/**", + "**/.vscode", + "**/.vscode/**" + ], + "C_Cpp_Runner.useAddressSanitizer": false, + "C_Cpp_Runner.useUndefinedSanitizer": false, + "C_Cpp_Runner.useLeakSanitizer": false, + "C_Cpp_Runner.showCompilationTime": false, + "C_Cpp_Runner.useLinkTimeOptimization": false, + "C_Cpp_Runner.msvcSecureNoWarnings": false +} \ No newline at end of file diff --git a/ft_irc3/Makefile b/ft_irc3/Makefile new file mode 100644 index 0000000..8f65f1c --- /dev/null +++ b/ft_irc3/Makefile @@ -0,0 +1,46 @@ +# **************************************************************************** # +# # +# ::: :::::::: # +# Makefile :+: :+: :+: # +# +:+ +:+ +:+ # +# By: fgras-ca +#+ +:+ +#+ # +# +#+#+#+#+#+ +#+ # +# Created: 2024/05/15 12:13:50 by fgras-ca #+# #+# # +# Updated: 2024/05/15 12:47:49 by fgras-ca ### ########.fr # +# # +# **************************************************************************** # + +CXX = g++ +CXXFLAGS = -Wall -Wextra -Werror -std=c++98 +LDFLAGS = -pthread + +SRC_DIR = src +INC_DIR = includes +OBJ_DIR = obj +LOG_DIR = logs + +SRCS = $(wildcard $(SRC_DIR)/*.cpp) +OBJS = $(SRCS:$(SRC_DIR)/%.cpp=$(OBJ_DIR)/%.o) + +NAME = ircserv + +all: $(NAME) + +$(NAME): $(OBJS) + $(CXX) $(CXXFLAGS) -I$(INC_DIR) -o $@ $^ $(LDFLAGS) + mkdir -p $(LOG_DIR) + touch $(LOG_DIR)/irc_server.log + +$(OBJ_DIR)/%.o: $(SRC_DIR)/%.cpp + mkdir -p $(OBJ_DIR) + $(CXX) $(CXXFLAGS) -I$(INC_DIR) -c $< -o $@ + +clean: + rm -rf $(OBJ_DIR) $(NAME) + +fclean: clean + rm -rf $(LOG_DIR) + +re: fclean all + +.PHONY: all clean fclean re diff --git a/ft_irc3/includes/AdditionalCommands.hpp b/ft_irc3/includes/AdditionalCommands.hpp new file mode 100644 index 0000000..e5ecb10 --- /dev/null +++ b/ft_irc3/includes/AdditionalCommands.hpp @@ -0,0 +1,32 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* AdditionalCommands.hpp :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: fgras-ca +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/05/16 15:23:58 by fgras-ca #+# #+# */ +/* Updated: 2024/05/16 16:03:22 by fgras-ca ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#ifndef ADDITIONALCOMMANDS_HPP +#define ADDITIONALCOMMANDS_HPP + +#include "Client.hpp" +#include "Server.hpp" +#include "Channel.hpp" +#include "Utils.hpp" + +#include +#include + +class Server; +class Client; +class Channel; + +void handlePartCommand(Server *server, Client *client, const std::string &command); +void handleNickCommand(Server *server, Client *client, const std::string &command); +void handlePrivmsgCommand(Server *server, Client *client, const std::string &command); + +#endif diff --git a/ft_irc3/includes/Channel.hpp b/ft_irc3/includes/Channel.hpp new file mode 100644 index 0000000..07693f1 --- /dev/null +++ b/ft_irc3/includes/Channel.hpp @@ -0,0 +1,38 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* Channel.hpp :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: fgras-ca +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/05/15 12:41:35 by fgras-ca #+# #+# */ +/* Updated: 2024/05/15 12:48:40 by fgras-ca ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#ifndef CHANNEL_HPP +#define CHANNEL_HPP + +#include +#include +#include + +class Client; + +class Channel { +public: + Channel(const std::string &name); + ~Channel(); + + const std::string &getName() const; + void addClient(Client *client); + void removeClient(Client *client); + bool isEmpty() const; + const std::vector &getClients() const; + +private: + std::string _name; + std::vector _clients; +}; + +#endif diff --git a/ft_irc3/includes/Client.hpp b/ft_irc3/includes/Client.hpp new file mode 100644 index 0000000..26fc493 --- /dev/null +++ b/ft_irc3/includes/Client.hpp @@ -0,0 +1,49 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* Client.hpp :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: fgras-ca +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/05/15 12:15:42 by fgras-ca #+# #+# */ +/* Updated: 2024/05/16 18:18:02 by fgras-ca ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#ifndef CLIENT_HPP +#define CLIENT_HPP + +#include + +class Client +{ +public: + Client(int fd); + + void setPassword(const std::string &password); + const std::string &getPassword() const; + + void setNickname(const std::string &nickname); + const std::string &getNickname() const; + + void setUser(const std::string &user); + const std::string &getUser() const; + + void setRealName(const std::string &realname); + const std::string &getRealName() const; + + bool isAuthenticated() const; + void authenticate(); + + int getFd() const; + +private: + int _fd; + std::string _password; + std::string _nickname; + std::string _user; + std::string _realname; + bool _authenticated; +}; + +#endif diff --git a/ft_irc3/includes/ClientManager.hpp b/ft_irc3/includes/ClientManager.hpp new file mode 100644 index 0000000..43e637b --- /dev/null +++ b/ft_irc3/includes/ClientManager.hpp @@ -0,0 +1,45 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ClientManager.hpp :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: fgras-ca +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/05/15 18:30:07 by fgras-ca #+# #+# */ +/* Updated: 2024/05/16 16:26:03 by fgras-ca ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#ifndef CLIENTMANAGER_HPP +#define CLIENTMANAGER_HPP + +#include +#include +#include "Client.hpp" +#include "Channel.hpp" +#include "Server.hpp" +#include +#include "CommandHandler.hpp" +#include "Utils.hpp" +#include +#include +#include +#include +#include +#include + +class Server; + +class ClientManager +{ +public: + ClientManager(Server *server); + void acceptClient(); + void handleClient(int client_fd); + void removeClient(int client_fd); + +private: + Server *_server; +}; + +#endif diff --git a/ft_irc3/includes/CommandHandler.hpp b/ft_irc3/includes/CommandHandler.hpp new file mode 100644 index 0000000..d727419 --- /dev/null +++ b/ft_irc3/includes/CommandHandler.hpp @@ -0,0 +1,41 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* CommandHandler.hpp :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: fgras-ca +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/05/15 18:14:12 by fgras-ca #+# #+# */ +/* Updated: 2024/05/16 17:35:46 by fgras-ca ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#ifndef COMMANDHANDLER_HPP +#define COMMANDHANDLER_HPP + +#include "Utils.hpp" +#include "Server.hpp" +#include "Client.hpp" +#include "Channel.hpp" +#include "AdditionalCommands.hpp" + +#include +#include +#include + +class Server; + +class CommandHandler +{ +private: + Server *_server; + +public: + CommandHandler(Server *server); + void handleCommand(Client *client, const std::string &command); + void processCommand(Client *client, const std::string &command); + void handleJoinCommand(Client *client, const std::string &channelName); + std::string getUsersList(Channel *channel); +}; + +#endif diff --git a/ft_irc3/includes/Server.hpp b/ft_irc3/includes/Server.hpp new file mode 100644 index 0000000..c4d0dda --- /dev/null +++ b/ft_irc3/includes/Server.hpp @@ -0,0 +1,76 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* Server.hpp :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: fgras-ca +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/05/15 12:15:13 by fgras-ca #+# #+# */ +/* Updated: 2024/05/16 17:40:34 by fgras-ca ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#ifndef SERVER_HPP +#define SERVER_HPP + +#include "Utils.hpp" +#include "Client.hpp" +#include "Channel.hpp" +#include "ClientManager.hpp" +#include "CommandHandler.hpp" +#include "AdditionalCommands.hpp" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +class Client; +class Channel; +class ClientManager; +class CommandHandler; + +class Server +{ +public: + Server(int port, const std::string &password); + ~Server(); + void run(); + void log(const std::string &message, const std::string &color = "\033[0m"); + void sendToClient(int client_fd, const std::string &message); + + // Méthodes d'accès pour les canaux et les clients + std::map &getChannels(); + std::map &getClients(); + const std::string &getPassword() const; + + +protected: + int _server_fd; + int _port; + std::string _password; + std::map _clients; + std::map _channels; + std::vector _poll_fds; + ClientManager *_clientManager; + CommandHandler *_commandHandler; + + friend class ClientManager; + friend class CommandHandler; + +private: + void initServer(); + void handleServerCommands(); + void acceptClient(); + void removeClient(int client_fd); +}; + +#endif diff --git a/ft_irc3/includes/Utils.hpp b/ft_irc3/includes/Utils.hpp new file mode 100644 index 0000000..c5108b5 --- /dev/null +++ b/ft_irc3/includes/Utils.hpp @@ -0,0 +1,30 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* Utils.hpp :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: fgras-ca +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/05/15 12:16:02 by fgras-ca #+# #+# */ +/* Updated: 2024/05/16 18:14:58 by fgras-ca ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#ifndef UTILS_HPP +#define UTILS_HPP + +#include +#include +#include + +#define RESET "\033[0m" +#define RED "\033[31m" +#define GREEN "\033[32m" +#define YELLOW "\033[33m" +#define BLUE "\033[34m" +#define MAGENTA "\033[35m" +#define CYAN "\033[36m" + +std::vector split(const std::string &input, const std::string &delimiters); + +#endif diff --git a/ft_irc3/ircserv b/ft_irc3/ircserv new file mode 100755 index 0000000000000000000000000000000000000000..ac98a32838786d3f51032dd6276a112bb4e2dd9e GIT binary patch literal 173040 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

DYNp$LzB@wYxNHfpup0(@!1H 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 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..75cfa4bf01266218bbd51b0a0e88bbf2216fa462 GIT binary patch literal 144664 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 R>8IS6eWlDwe95Bq{{zH%bwB_B literal 0 HcmV?d00001 diff --git a/ft_irc3/obj/Channel.o b/ft_irc3/obj/Channel.o new file mode 100644 index 0000000000000000000000000000000000000000..6fa4de2005090db533ad7d59e1696bdde2fcdfae GIT binary patch literal 50944 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 literal 0 HcmV?d00001 diff --git a/ft_irc3/obj/ClientManager.o b/ft_irc3/obj/ClientManager.o new file mode 100644 index 0000000000000000000000000000000000000000..2ff931a3877c94833e02fcb30edfe47d774773ab GIT binary patch literal 121080 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 literal 0 HcmV?d00001 diff --git a/ft_irc3/obj/CommandHandler.o b/ft_irc3/obj/CommandHandler.o new file mode 100644 index 0000000000000000000000000000000000000000..b954b0efa485a8956d6492475ddf3e058da3f6ec GIT binary patch literal 117840 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 literal 0 HcmV?d00001 diff --git a/ft_irc3/obj/Server.o b/ft_irc3/obj/Server.o new file mode 100644 index 0000000000000000000000000000000000000000..58a0b4d2393fb7d53ade9a13ecb789fe1a705818 GIT binary patch literal 105360 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

d{pRPHvR(8oCja(_M=34=GzWiFG0EE3 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 E4^XYZ@&Et; literal 0 HcmV?d00001 diff --git a/ft_irc3/obj/Utils.o b/ft_irc3/obj/Utils.o new file mode 100644 index 0000000000000000000000000000000000000000..48531589306b696ec91760ad41693b66705e1df6 GIT binary patch literal 37984 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 literal 0 HcmV?d00001 diff --git a/ft_irc3/obj/main.o b/ft_irc3/obj/main.o new file mode 100644 index 0000000000000000000000000000000000000000..3beabb47d2a3ba9f7a90fb79e47cff1b08361902 GIT binary patch literal 4840 zcmbuDUu+ab7{KT5D6LZ91XQFzicx|h>s?zAu#!T#vQ0~AdaW9;8Mk{&yW#HkvbzUY zOf{sIa5*m_7<`ZyUL?`@;)5{;1p*1`3&d!|7d0W8)If~H7h)RE@0*>un=ZFR;zxF8 z=QrQK{bp`v%Ug;5o^U8cgoMZrQtJsy$n4_Ua~FH;A}h#pru#7T7s2({(zSn&sKwus z>ap8R;H3EF+&`6yTKx1+Xi{ov!P6T+OD!g5!E6pGz?}@|2eN#Cs|yYhEv)kBc}fv+u&oj$Uaw&>qi_5l0(0 zwzrbj&YWetJD|}V=ZIyec950>u?(qHLhJWt2{{#RC`QP|aKq&YxfX8tC_-+s=R4tT zg!~*~QL(i5%AW4-?X4R|#`0M=-x`lA9ZGCdJkPrEH{05jSjRIQGus7lkHUo>_Y91X zFd>(aMc_hN?KLEHbg+MjgbLBdGe}xmnj4!=!s|T+9lTKffIixi#FFUoaQEVc>U1RX zQwTH({MI}P9c5lZ!XEvL7%!uWunq5Jb~x6F9OMbSiSa=;jHIq${Ymy0T&|d zMggn~V^*F(X_-vI9p}+6(*Wvm{9)GP-v;nz$h)5YngIS}0DnG!=K}at0KXi-zYE|u z1NdqvalQB27{F5j_2~@IA4U$BU$g-I$pB6=nweGfT#nHFNw?!T^Cf#^kpU`aT+M4M)y?P=s1gw2bb07l?q8VDIS0AQ{ z*+}*hUxImUHu8_`8Besbg%y3Jc4Bmd~QM0fuxmo5`#TMNh?VcL~|{8 zF`yb`(;ZJ7W*zqhO7%h^9*?(qxj|}XcD!CZW{8%M?@(W|-HUKjNtu#GSO;`K*^C2O`LWyY(zbvPVpq>LJ6)XAHttgMNtW6Nl(Q%}jg6*lJo1 zg*q4=y|75UBGHs%(Fs^3X|RIwx$~7g=TJk9YOYa$#a7#kaY^HuF$aemN)KP)$njfB z@Bz;8Txga!?r$i<54I?}*RXR$)_)^_&u}jMh@J6dfd2bF{WZM*L4f|poIeZg61c>B zeJ1HImG}*b4c1>Yxe{5TX`m-u56 zwkABngTy)mnbRC)rd0Y zI7G26uQRUe)F|ji&ZS@nI|G~zppQoj)ofdv)BuD4)OOVi{E|_266xO z=P!V$m+&F_qV0o$y7lK1FY1i-M;l=$xCRV!iuel9#1j(wpu)u8e+?*$@3TKqCqAw} zVK3sBfnod@T(U%Ye4JldMEykj9t?_SS+Db+f_kHV-E)BPuNq(aq>J0PdS=zT$X|d9 z@PI!3_OEmMvqF)#e*4dX*PFkyynY34hx3Q$v9K5Qs~4M@pi_`po*16N_>=V8Bdb@c cS-v40_q~|EewbH1`<49vrLM!cEPnfc0Vw2vWdHyG literal 0 HcmV?d00001 diff --git a/ft_irc3/src/AdditionalCommands.cpp b/ft_irc3/src/AdditionalCommands.cpp new file mode 100644 index 0000000..148f0cb --- /dev/null +++ b/ft_irc3/src/AdditionalCommands.cpp @@ -0,0 +1,108 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* AdditionalCommands.cpp :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: fgras-ca +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/05/16 15:27:29 by fgras-ca #+# #+# */ +/* Updated: 2024/05/16 16:41:53 by fgras-ca ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "AdditionalCommands.hpp" + +// Fonction pour gérer la commande PART +void handlePartCommand(Server *server, Client *client, const std::string &command) +{ + std::istringstream iss(command); + std::string cmd, channelName; + iss >> cmd >> channelName; + + std::map &channels = server->getChannels(); + + if (channels.find(channelName) != channels.end()) + { + Channel *channel = channels[channelName]; + channel->removeClient(client); + + std::stringstream partMsg; + partMsg << ":" << client->getNickname() << " PART " << channelName << "\r\n"; + server->sendToClient(client->getFd(), partMsg.str()); + + if (channel->isEmpty()) + { + delete channel; + channels.erase(channelName); + } + + server->log("Client " + client->getNickname() + " left channel " + channelName, MAGENTA); + } + else + { + std::stringstream ss; + ss << ":server 403 " << client->getNickname() << " " << channelName << " :No such channel\r\n"; + server->sendToClient(client->getFd(), ss.str()); + } +} + +// Fonction pour gérer la commande NICK +void handleNickCommand(Server *server, Client *client, const std::string &command) +{ + std::istringstream iss(command); + std::string cmd, newNick; + iss >> cmd >> newNick; + + std::stringstream nickMsg; + nickMsg << ":" << client->getNickname() << " NICK " << newNick << "\r\n"; + server->sendToClient(client->getFd(), nickMsg.str()); + + client->setNickname(newNick); + + std::stringstream ss; + ss << "Client " << client->getFd() << " changed nickname to " << newNick; + server->log(ss.str(), GREEN); +} + +// Fonction pour gérer la commande PRIVMSG +void handlePrivmsgCommand(Server *server, Client *client, const std::string &command) +{ + std::istringstream iss(command); + std::string cmd, target, message; + iss >> cmd >> target; + getline(iss, message); + if (!message.empty() && message[0] == ':') + message = message.substr(1); + + std::map &channels = server->getChannels(); + std::map &clients = server->getClients(); + + if (channels.find(target) != channels.end()) + { + Channel *channel = channels[target]; + std::vector channelClients = channel->getClients(); + + for (size_t i = 0; i < channelClients.size(); ++i) + { + if (channelClients[i] != client) + { + std::stringstream privMsg; + privMsg << ":" << client->getNickname() << " PRIVMSG " << target << " :" << message << "\r\n"; + server->sendToClient(channelClients[i]->getFd(), privMsg.str()); + } + } + } + else if (clients.find(atoi(target.c_str())) != clients.end()) + { + Client *targetClient = clients[atoi(target.c_str())]; + std::stringstream privMsg; + privMsg << ":" << client->getNickname() << " PRIVMSG " << target << " :" << message << "\r\n"; + server->sendToClient(targetClient->getFd(), privMsg.str()); + } + else + { + std::stringstream ss; + ss << ":server 401 " << client->getNickname() << " " << target << " :No such nick/channel\r\n"; + server->sendToClient(client->getFd(), ss.str()); + } +} diff --git a/ft_irc3/src/Channel.cpp b/ft_irc3/src/Channel.cpp new file mode 100644 index 0000000..9a2bf89 --- /dev/null +++ b/ft_irc3/src/Channel.cpp @@ -0,0 +1,49 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* Channel.cpp :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: fgras-ca +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/05/15 12:42:57 by fgras-ca #+# #+# */ +/* Updated: 2024/05/15 12:54:40 by fgras-ca ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "Channel.hpp" +#include "Client.hpp" +#include + +Channel::Channel(const std::string &name) + : _name(name) +{ +} + +Channel::~Channel() +{ +} + +const std::string &Channel::getName() const +{ + return _name; +} + +void Channel::addClient(Client *client) +{ + _clients.push_back(client); +} + +void Channel::removeClient(Client *client) +{ + _clients.erase(std::remove(_clients.begin(), _clients.end(), client), _clients.end()); +} + +bool Channel::isEmpty() const +{ + return _clients.empty(); +} + +const std::vector &Channel::getClients() const +{ + return _clients; +} diff --git a/ft_irc3/src/Client.cpp b/ft_irc3/src/Client.cpp new file mode 100644 index 0000000..f071dbd --- /dev/null +++ b/ft_irc3/src/Client.cpp @@ -0,0 +1,104 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* Client.cpp :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: fgras-ca +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/05/15 12:17:42 by fgras-ca #+# #+# */ +/* Updated: 2024/05/16 18:18:19 by fgras-ca ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "Client.hpp" + +Client::Client(int fd) + : _fd(fd), _authenticated(false) +{ +} + +void Client::setPassword(const std::string &password) +{ + _password = password; +} + +const std::string &Client::getPassword() const +{ + return _password; +} + +void Client::setNickname(const std::string &nickname) +{ + _nickname = nickname; +} + +const std::string &Client::getNickname() const +{ + return _nickname; +} + +void Client::setUser(const std::string &user) +{ + _user = user; +} + +const std::string &Client::getUser() const +{ + return _user; +} + +void Client::setRealName(const std::string &realname) +{ + _realname = realname; +} + +const std::string &Client::getRealName() const +{ + return _realname; +} + +bool Client::isAuthenticated() const +{ + return _authenticated; +} + +void Client::authenticate() +{ + _authenticated = true; +} + +int Client::getFd() const +{ + return _fd; +} + + + + +/*Client::Client(int fd) + +Description: Constructeur de la classe Client. Initialise le client avec le descripteur de fichier fourni. +Paramètres: +int fd: Le descripteur de fichier du client. +Client::~Client() + +Description: Destructeur de la classe Client. Gère la destruction de l'objet. +int Client::getFd() const + +Description: Renvoie le descripteur de fichier du client. +Retourne: Le descripteur de fichier du client. +void Client::setPassword(const std::string &password) + +Description: Définit le mot de passe du client et le marque comme authentifié. +Paramètres: +const std::string &password: Le mot de passe à définir. +bool Client::isAuthenticated() const + +Description: Vérifie si le client est authentifié. +Retourne: true si le client est authentifié, false sinon. +void logMessage(const std::string &message, const std::string &color) + +Description: Enregistre un message dans les logs et l'affiche avec des couleurs dans la console. +Paramètres: +const std::string &message: Le message à enregistrer. +const std::string &color: La couleur du message.*/ \ No newline at end of file diff --git a/ft_irc3/src/ClientManager.cpp b/ft_irc3/src/ClientManager.cpp new file mode 100644 index 0000000..451d870 --- /dev/null +++ b/ft_irc3/src/ClientManager.cpp @@ -0,0 +1,110 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ClientManager.cpp :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: fgras-ca +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/05/15 18:32:23 by fgras-ca #+# #+# */ +/* Updated: 2024/05/16 16:25:50 by fgras-ca ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "ClientManager.hpp" + +ClientManager::ClientManager(Server *server) + : _server(server) +{ +} + +void ClientManager::acceptClient() +{ + int client_fd = accept(_server->_server_fd, NULL, NULL); + if (client_fd < 0) + { + _server->log("Accept failed.", RED); + return; + } + fcntl(client_fd, F_SETFL, O_NONBLOCK); + _server->_clients[client_fd] = new Client(client_fd); + struct pollfd client_pollfd; + client_pollfd.fd = client_fd; + client_pollfd.events = POLLIN; + _server->_poll_fds.push_back(client_pollfd); + + std::stringstream ss; + ss << "Client connected: " << client_fd; + _server->log(ss.str(), GREEN); + _server->sendToClient(client_fd, ":server NOTICE * :Connected to the server\r\n"); // Debug message +} + +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); + if (bytes_received <= 0) + { + removeClient(client_fd); + return; + } + + std::string message(buffer); + std::stringstream ss; + ss << "Received from client " << client_fd << ": " << message; + _server->log(ss.str(), BLUE); + + Client *client = _server->_clients[client_fd]; + std::istringstream message_stream(message); + std::string line; + + while (std::getline(message_stream, line)) + { + // Suppression des caractères de fin de ligne + line.erase(std::remove(line.begin(), line.end(), '\r'), line.end()); + line.erase(std::remove(line.begin(), line.end(), '\n'), line.end()); + + _server->_commandHandler->handleCommand(client, line); + } +} + +void ClientManager::removeClient(int client_fd) +{ + Client *client = _server->_clients[client_fd]; + if (client) + { + // Retirer le client de tous les canaux auxquels il appartient + std::map::iterator it = _server->_channels.begin(); + while (it != _server->_channels.end()) + { + it->second->removeClient(client); + if (it->second->isEmpty()) + { + delete it->second; + std::map::iterator it_to_delete = it++; + _server->_channels.erase(it_to_delete); + } + else + { + ++it; + } + } + delete client; + _server->_clients.erase(client_fd); + } + + std::vector::iterator it_poll = _server->_poll_fds.begin(); + while (it_poll != _server->_poll_fds.end()) + { + if (it_poll->fd == client_fd) + { + _server->_poll_fds.erase(it_poll); + break; + } + ++it_poll; + } + + std::stringstream ss; + ss << "Client disconnected: " << client_fd; + _server->log(ss.str(), YELLOW); +} diff --git a/ft_irc3/src/CommandHandler.cpp b/ft_irc3/src/CommandHandler.cpp new file mode 100644 index 0000000..fecc912 --- /dev/null +++ b/ft_irc3/src/CommandHandler.cpp @@ -0,0 +1,152 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* CommandHandler.cpp :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: fgras-ca +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/05/15 18:26:34 by fgras-ca #+# #+# */ +/* Updated: 2024/05/16 19:34:36 by fgras-ca ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "CommandHandler.hpp" + +CommandHandler::CommandHandler(Server *server) + : _server(server) +{ +} + +void CommandHandler::handleCommand(Client *client, const std::string &command) +{ + std::vector tokens = split(command, " \n\r\t"); + + if (tokens.empty()) + { + return; + } + + std::string commandType = tokens[0]; + + if (commandType == "PASS") + { + if (tokens.size() > 1 && tokens[1] == _server->_password) + { + client->setPassword(tokens[1]); + _server->sendToClient(client->getFd(), ":server 001 " + client->getNickname() + " :Password accepted\r\n"); + _server->log("Client " + client->getNickname() + " provided correct password.", GREEN); + } + else + { + _server->sendToClient(client->getFd(), ":server 464 " + client->getNickname() + " :Invalid password\r\n"); + _server->log("Client " + client->getNickname() + " failed authentication password.", RED); + } + } + else if (commandType == "NICK") + { + if (tokens.size() > 1) + { + client->setNickname(tokens[1]); + std::stringstream ss; + ss << "Client " << client->getFd() << " Nickname: " << tokens[1]; + _server->log(ss.str(), GREEN); + _server->sendToClient(client->getFd(), ":" + tokens[1] + " NICK " + tokens[1] + "\r\n"); + } + } + else if (commandType == "USER") + { + if (tokens.size() > 4) + { + client->setUser(tokens[1]); + client->setRealName(tokens[4].substr(1)); // remove leading ':' + if (client->getPassword() == _server->_password && !client->getNickname().empty()) + { + client->authenticate(); + _server->sendToClient(client->getFd(), ":server 001 " + client->getNickname() + " :Welcome to the IRC server\r\n"); + _server->log("Client " + client->getNickname() + " authenticated.", GREEN); + } + } + } + else + { + if (!client->isAuthenticated()) + { + _server->sendToClient(client->getFd(), ":server 451 " + client->getNickname() + " :Please provide the password first\r\n"); + _server->log("Client " + client->getNickname() + " failed authentication.", RED); + } + else + { + processCommand(client, command); + } + } + std::cout << "Client " << client->getFd() << " " << client->getNickname() << " " << client->getUser() << " " << client->getPassword() << " " << client->getRealName() << std::endl; +} + +void CommandHandler::processCommand(Client *client, const std::string &command) +{ + if (command.find("JOIN") == 0) + { + std::string channelName = command.substr(5); + handleJoinCommand(client, channelName); + } + else if (command.find("PART") == 0) + { + handlePartCommand(_server, client, command); + } + else if (command.find("NICK") == 0) + { + handleNickCommand(_server, client, command); + } + else if (command.find("PRIVMSG") == 0) + { + handlePrivmsgCommand(_server, client, command); + } + else + { + std::stringstream ss; + ss << ":server 421 " << client->getNickname() << " " << command << " :Unknown command\r\n"; + _server->sendToClient(client->getFd(), ss.str()); + _server->log("Message from client " + client->getNickname() + ": " + command, MAGENTA); + } +} + +void CommandHandler::handleJoinCommand(Client *client, const std::string &channelName) +{ + if (_server->getChannels().find(channelName) == _server->getChannels().end()) + { + _server->getChannels()[channelName] = new Channel(channelName); + _server->log("Channel created: " + channelName, GREEN); + } + Channel *channel = _server->getChannels()[channelName]; + channel->addClient(client); + + std::stringstream joinMsg; + joinMsg << ":" << client->getNickname() << " JOIN :" << channelName << "\r\n"; + _server->sendToClient(client->getFd(), joinMsg.str()); + + std::string usersList = getUsersList(channel); + _server->sendToClient(client->getFd(), usersList); + + std::stringstream endOfNamesMsg; + endOfNamesMsg << ":server 366 " << client->getNickname() << " " << channelName << " :End of /NAMES list.\r\n"; + _server->sendToClient(client->getFd(), endOfNamesMsg.str()); + + std::stringstream ss; + ss << "Client " << client->getNickname() << " joined channel " << channelName; + _server->log(ss.str(), MAGENTA); +} + +std::string CommandHandler::getUsersList(Channel *channel) +{ + std::vector clients = channel->getClients(); + std::stringstream ss; + ss << ":server 353 " << clients[0]->getNickname() << " = " << channel->getName() << " :"; + for (size_t i = 0; i < clients.size(); ++i) + { + if (i > 0) + ss << " "; + ss << clients[i]->getNickname(); + } + ss << "\r\n"; + return ss.str(); +} diff --git a/ft_irc3/src/Server.cpp b/ft_irc3/src/Server.cpp new file mode 100644 index 0000000..c40eb54 --- /dev/null +++ b/ft_irc3/src/Server.cpp @@ -0,0 +1,273 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* Server.cpp :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: fgras-ca +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/05/15 12:17:12 by fgras-ca #+# #+# */ +/* Updated: 2024/05/16 18:52:19 by fgras-ca ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "Server.hpp" + +Server::Server(int port, const std::string &password) + : _port(port), _password(password), _clientManager(new ClientManager(this)), _commandHandler(new CommandHandler(this)) +{ + initServer(); +} + +Server::~Server() +{ + delete _clientManager; + delete _commandHandler; + + for (std::map::iterator it = _clients.begin(); it != _clients.end(); ++it) + { + delete it->second; + } + for (std::map::iterator it = _channels.begin(); it != _channels.end(); ++it) + { + delete it->second; + } + close(_server_fd); +} + +void Server::initServer() +{ + _server_fd = socket(AF_INET, SOCK_STREAM, 0); + if (_server_fd == -1) + { + log("Failed to create socket.", RED); + exit(EXIT_FAILURE); + } + + struct sockaddr_in server_addr; + std::memset(&server_addr, 0, sizeof(server_addr)); + server_addr.sin_family = AF_INET; + server_addr.sin_addr.s_addr = INADDR_ANY; + server_addr.sin_port = htons(_port); + + if (bind(_server_fd, (struct sockaddr*)&server_addr, sizeof(server_addr)) == -1) + { + log("Failed to bind socket.", RED); + exit(EXIT_FAILURE); + } + + if (listen(_server_fd, SOMAXCONN) == -1) + { + log("Failed to listen on socket.", RED); + exit(EXIT_FAILURE); + } + + log("Server initialized.", GREEN); +} + +void Server::run() +{ + struct pollfd server_pollfd; + server_pollfd.fd = _server_fd; + server_pollfd.events = POLLIN; + server_pollfd.revents = 0; + _poll_fds.push_back(server_pollfd); + + while (true) + { + int poll_count = poll(&_poll_fds[0], _poll_fds.size(), -1); + if (poll_count == -1) + { + log("Poll error.", RED); + exit(EXIT_FAILURE); + } + + for (size_t i = 0; i < _poll_fds.size(); ++i) + { + if (_poll_fds[i].revents & POLLIN) + { + if (_poll_fds[i].fd == _server_fd) + { + _clientManager->acceptClient(); + } + else + { + _clientManager->handleClient(_poll_fds[i].fd); + } + } + } + + handleServerCommands(); + } +} + +void Server::handleServerCommands() +{ + fd_set readfds; + FD_ZERO(&readfds); + FD_SET(STDIN_FILENO, &readfds); + struct timeval tv = {0, 0}; // non-blocking + + int activity = select(STDIN_FILENO + 1, &readfds, NULL, NULL, &tv); + + if (activity > 0 && FD_ISSET(STDIN_FILENO, &readfds)) + { + std::string command; + std::getline(std::cin, command); + + if (command == "quit") + { + log("Server shutting down.", YELLOW); + exit(EXIT_SUCCESS); + } + else if (command == "channels") + { + log("Listing all channels:", BLUE); + for (std::map::iterator it = _channels.begin(); it != _channels.end(); ++it) + { + log(it->first, BLUE); + } + } + else if (command == "clients") + { + log("Listing all clients:", BLUE); + for (std::map::iterator it = _clients.begin(); it != _clients.end(); ++it) + { + log(it->second->getNickname(), BLUE); + } + } + else + { + log("Unknown server command.", RED); + } + } +} + +void Server::log(const std::string &message, const std::string &color) +{ + std::cout << color << message << RESET << std::endl; +} + +void Server::sendToClient(int client_fd, const std::string &message) +{ + int result = send(client_fd, message.c_str(), message.length(), 0); + if (result < 0) + { + std::stringstream ss; + ss << "Failed to send message to client " << client_fd; + log(ss.str(), RED); + } + else + { + std::stringstream ss; + ss << "Sent message to client " << client_fd << ": " << message; + log(ss.str(), BLUE); + } +} + + +std::map &Server::getClients() +{ + return _clients; +} + +std::map &Server::getChannels() +{ + return _channels; +} + +const std::string &Server::getPassword() const +{ + return _password; +} + + +/* Explications des Fonctions +Server::Server(int port, const std::string &password) + +Description: Constructeur de la classe Server. Initialise le serveur avec le port et le mot de passe fournis. +Paramètres: +int port: Le port sur lequel le serveur écoute. +const std::string &password: Le mot de passe requis pour se connecter au serveur. +Détails: Appelle initServer() pour initialiser les paramètres du socket et commencer l'écoute des connexions. +Server::~Server() + +Description: Destructeur de la classe Server. Ferme le socket du serveur et libère la mémoire des clients. +Détails: Parcourt la map _clients et delete chaque objet Client. +void Server::initServer() + +Description: Initialise le socket du serveur et configure le binding et l'écoute. +Détails: Crée un socket avec socket(), lie le socket à une adresse avec bind(), et met le socket en mode écoute avec listen(). +void Server::run() + +Description: Boucle principale du serveur qui gère les connexions entrantes et les communications avec les clients. +Détails: Utilise poll() pour surveiller les événements sur les sockets. Accepte les nouvelles connexions avec acceptClient() et gère les communications avec handleClient(). +void Server::acceptClient() + +Description: Accepte une nouvelle connexion client et l'ajoute à la liste des clients. +Détails: Crée un nouvel objet Client et l'ajoute à la map _clients. Ajoute le descripteur de fichier du client à _poll_fds. +void Server::handleClient(int client_fd) + +Description: Gère les messages entrants des clients. +Paramètres: +int client_fd: Le descripteur de fichier du client. +Détails: Reçoit les messages du client et vérifie l'authentification. Si le client n'est pas authentifié, vérifie le mot de passe. Si le client est authentifié, répond au message. +void Server::removeClient(int client_fd) + +Description: Supprime un client de la liste et ferme la connexion. +Paramètres: +int client_fd: Le descripteur de fichier du client. +Détails: Ferme le socket du client et le supprime de la map _clients et du vecteur _poll_fds. +void Server::log(const std::string &message, const std::string &color) + +Description: Enregistre un message dans les logs et l'affiche avec des couleurs dans la console. +Paramètres: +const std::string &message: Le message à enregistrer. +const std::string &color: La couleur du message. +Détails: Utilise logMessage() pour enregistrer et afficher le message. +void Server::sendToClient(int client_fd, const std::string &message) + +Description: Envoie un message à un client. +Paramètres: +int client_fd: Le descripteur de fichier du client. +const std::string &message: Le message à envoyer. +Détails: Utilise send() pour envoyer le message au client. + +Lecture Ligne par Ligne : Utilisez std::istringstream pour lire le message ligne par ligne et traiter chaque commande séparément. +Suppression des Caractères de Fin de Ligne : Utilisez erase et std::remove pour supprimer les caractères \r et \n de chaque ligne avant de traiter la commande. +Vérification du Mot de Passe : Si le client n'est pas authentifié, vérifiez s'il envoie la commande PASS et validez le mot de passe. Sinon, répondez avec un message demandant le mot de passe. +Explications des Modifications +Notification de Jonction : Lorsque le client rejoint un canal, le serveur envoie une notification de jonction avec la commande JOIN. + + +std::stringstream joinMsg; +joinMsg << ":" << client->getFd() << " JOIN " << channelName << "\r\n"; +sendToClient(client->getFd(), joinMsg.str()); +Liste des Utilisateurs : Le serveur envoie la liste des utilisateurs dans le canal en utilisant le code de réponse 353. + + +std::string usersList = getUsersList(channel); +sendToClient(client->getFd(), usersList); +Fin de la Liste des Utilisateurs : Le serveur envoie un message de fin de liste des utilisateurs avec le code de réponse 366. + +std::stringstream endOfNamesMsg; +endOfNamesMsg << ":server 366 " << client->getFd() << " " << channelName << " :End of /NAMES list.\r\n"; +sendToClient(client->getFd(), endOfNamesMsg.str()); +Fonction getUsersList : Cette fonction génère la liste des utilisateurs dans le canal en utilisant le format correct. + +std::string Server::getUsersList(Channel *channel) +{ + std::vector clients = channel->getClients(); + std::stringstream ss; + ss << ":server 353 " << clients[0]->getFd() << " = " << channel->getName() << " :"; + for (size_t i = 0; i < clients.size(); ++i) + { + if (i > 0) + ss << " "; + ss << clients[i]->getFd(); + } + ss << "\r\n"; + return ss.str(); +} +Avec ces modifications, votre serveur IRC devrait maintenant informer correctement le client HexChat des utilisateurs présents dans un canal, ce qui devrait faire apparaître les canaux et leurs utilisateurs correctement dans l'interface du client. + +*/ \ No newline at end of file diff --git a/ft_irc3/src/Utils.cpp b/ft_irc3/src/Utils.cpp new file mode 100644 index 0000000..133e6cd --- /dev/null +++ b/ft_irc3/src/Utils.cpp @@ -0,0 +1,37 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* Utils.cpp :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: fgras-ca +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/05/15 12:17:59 by fgras-ca #+# #+# */ +/* Updated: 2024/05/16 18:17:21 by fgras-ca ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "Utils.hpp" + +std::vector split(const std::string &input, const std::string &delimiters) +{ + std::vector result; + size_t startPos = 0; + size_t foundPos = input.find_first_of(delimiters, startPos); + + while (foundPos != std::string::npos) + { + if (foundPos != startPos) + { + result.push_back(input.substr(startPos, foundPos - startPos)); + } + startPos = foundPos + 1; + foundPos = input.find_first_of(delimiters, startPos); + } + + if (startPos < input.length()) + { + result.push_back(input.substr(startPos)); + } + + return result; +} diff --git a/ft_irc3/src/main.cpp b/ft_irc3/src/main.cpp new file mode 100644 index 0000000..88862d5 --- /dev/null +++ b/ft_irc3/src/main.cpp @@ -0,0 +1,33 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* main.cpp :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: fgras-ca +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/05/15 12:16:41 by fgras-ca #+# #+# */ +/* Updated: 2024/05/15 12:49:07 by fgras-ca ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "Server.hpp" +#include "Utils.hpp" +#include +#include + +int main(int argc, char *argv[]) +{ + if (argc != 3) + { + std::cerr << RED << "Usage: " << argv[0] << " " << RESET << std::endl; + return EXIT_FAILURE; + } + + int port = std::atoi(argv[1]); + std::string password = argv[2]; + + Server server(port, password); + server.run(); + + return EXIT_SUCCESS; +}