#ifndef YC_LIB_USER_H #define YC_LIB_USER_H #include #include #include #include "base.h" namespace Yc { namespace Lib { class Room; class User: public Base, public std::enable_shared_from_this { public: enum MsgType { error = -1, token = 1, userListe = 2, roomList = 3, message = 4, system = 5, scream = 6, dosomething = 7, dice = 8, result = 9 }; User(std::shared_ptr parent, std::string name, std::string color, int socket); ~User(); std::string name() const; bool validateToken(std::string token); bool isUser(std::shared_ptr toValidate); void sendMsg(MsgType type, std::string message, std::string userName, std::string color); void sendMsg(MsgType type, const char *message, std::string userName, std::string color); void sendMsg(MsgType type, Json::Value message, std::string userName, std::string color); void checkerTask(); void stop(); std::string color() const; void setParent(std::shared_ptr parent); private: std::shared_ptr _parent; std::string _name; std::string _color; int _socket; std::string _token; bool _stop; std::unique_ptr thread; void send(std::string out); void send(Json::Value out); void handleMessage(std::string message); void doDice(); void changeRoom(std::string newRoom, std::string password); void checkString(std::string message); void sendUserList(); }; } // namespace Lib } // namespace Yc #endif // YC_LIB_USER_H