/******************************************************************************/ /* */ /* ::: :::::::: */ /* channel.hpp :+: :+: :+: */ /* +:+ +:+ +:+ */ /* By: vvaas +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/01/21 10:34:25 by maldavid #+# #+# */ /* Updated: 2024/01/30 17:23:28 by maldavid ### ########.fr */ /* */ /******************************************************************************/ #ifndef __CHANNEL__ #define __CHANNEL__ #include #include #include #include #include namespace irc { struct ClientCmp { bool operator()(const unstd::SharedPtr& lhs, const unstd::SharedPtr& rhs) const { return lhs.get() < rhs.get(); } }; class Channel { public: Channel(const std::string& name); inline const std::string& getName() const { return _name; } inline const std::string& getPassword() const { return _password; } void addClient(unstd::SharedPtr client, bool op = false); bool removeClient(unstd::SharedPtr client); inline std::size_t getNumberOfClients() const { return _clients.size(); } inline int getChannelSize() const { return _channel_size; } void modOperator(unstd::SharedPtr client, const std::string &clientname, bool mode); inline bool removeOperator(unstd::SharedPtr op) { return _operators.erase(op); } void changeMode(unstd::SharedPtr client, const Message& msg); bool isOp(unstd::SharedPtr client) const; void handleMessage(const std::string& msg, unstd::SharedPtr client, bool notice = false) const; void sendWho(unstd::SharedPtr client); inline bool hasClient(unstd::SharedPtr client) const { return _clients.find(client) != _clients.end(); } bool hasClient(std::string client) const; inline bool isInviteOnly() const { return _invite_only; } void setTopic(unstd::SharedPtr client, const std::string& new_topic); void relayTopic(unstd::SharedPtr client, bool broadcast = false); void showModesModify(unstd::SharedPtr client, const Message& msg) const; void showModes(unstd::SharedPtr client); bool kick(unstd::SharedPtr op, unstd::SharedPtr target, const std::string& reason); ~Channel(); private: std::set, ClientCmp> _clients; std::set, ClientCmp> _operators; std::string _name; std::string _password; std::string _topic; int _channel_size; bool _invite_only; bool _topic_op_restrict; }; } #endif