/******************************************************************************/ /* */ /* ::: :::::::: */ /* server.hpp :+: :+: :+: */ /* +:+ +:+ +:+ */ /* By: vvaas +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/01/21 09:12:28 by maldavid #+# #+# */ /* Updated: 2024/01/22 17:00:02 by maldavid ### ########.fr */ /* */ /******************************************************************************/ #ifndef __SERVER_IRC__ #define __SERVER_IRC__ #include #include #include #include #include #define MAX_USERS 20 namespace irc { class Server { public: Server(int port, const std::string& password); inline void closeMainSocket() { close(_main_socket); } void wait(); ~Server(); private: void initSocket(); void initSocketData(); void initSignal(); bool handleMessage(unstd::SharedPtr client); void handleInput(); // ugly as f*ck void handleNick(unstd::SharedPtr client, const class Message& msg); void handleUser(unstd::SharedPtr client, const class Message& msg); void handleQuit(unstd::SharedPtr client, const class Message& msg); void handlePart(unstd::SharedPtr client, const class Message& msg); void handleJoin(unstd::SharedPtr client, const class Message& msg); void handlePrivMsg(unstd::SharedPtr client, const class Message& msg); void handleNotice(unstd::SharedPtr client, const class Message& msg); void handleKick(unstd::SharedPtr client, const class Message& msg); void handleMotD(unstd::SharedPtr client, const class Message& msg); void handleTopic(unstd::SharedPtr client, const class Message& msg); void handlePing(unstd::SharedPtr client, const class Message& msg); void handleMode(unstd::SharedPtr client, const class Message& msg); private: std::vector _channels; std::vector > _client; sockaddr_in _s_data; socklen_t _s_len; fd_set _fd_set; const std::string _password; const std::string _ip; const int _port; int _main_socket; bool _active; }; } #endif