#ifndef USER_H #define USER_H #include #include #include #include #include "irccommand.h" #include "ircserver.h" #include "userconnection.h" #include "nameable.h" #include "channel.h" enum UCState { Initial, Registered }; class UserConnection; class User: public Nameable { private: std::string username, realname = ""; Connection* connection; UCState state; std::vector nick_cmd(IRCCommand cmd); std::vector user_cmd(IRCCommand cmd); std::vector ping_cmd(IRCCommand cmd); std::vector who_cmd(IRCCommand cmd); std::vector whois_cmd(IRCCommand cmd); std::vector join_cmd(IRCCommand cmd); std::vector part_cmd(IRCCommand cmd); std::vector quit_cmd(IRCCommand cmd); std::vector privmsg_cmd(IRCCommand cmd); std::vector topic_cmd(IRCCommand cmd); std::vector names_cmd(IRCCommand cmd); std::vector motd_cmd(IRCCommand cmd); static std::unordered_map(User*, IRCCommand)>, bool>> commands; //std::string construct_string(int count, std::string source, std::string command, std::string parameters...); template std::string construct_string(std::string source, std::string command, T... parameters); public: User(IRCServer* server, UserConnection* conn); ~User(); std::vector process_cmd(IRCCommand cmd); IRCCommand set_nick(std::string nick); void set_username(std::string username); void set_realname(std::string realname); bool has_nick(); bool has_username(); bool has_realname(); std::string get_nick(); std::string get_username(); std::string get_realname(); void send_direct(std::vector messages); NameableType what_are_you() override; void destroy(); }; #endif