#ifndef YC_LIB_ROOM_H #define YC_LIB_ROOM_H #include #include #include #include #include #include #include #include #include namespace Yc { namespace Lib { class Server; class Room: public Base { public: enum RoomType { none = 0, dice = 1, poker = 2, rounds = 4, password = 8 }; Room(Server *parent, Json::Value roomParams); ~Room(); void run(); std::string name(); bool addUser(std::string userName, std::string color, std::string password, int socket); bool addUser(User *user, std::string password); bool userNameExists(std::string userName); void removeUser(std::string _token, bool silent = false); void removeUser(User *user, bool silent = false); void setStop(); void addMessage(User::MsgType type, const char* messageText, std::string userName = "", std::string color = ""); void addMessage(User::MsgType type, std::string messageText, std::string userName = "", std::string color = ""); void addMessage(User::MsgType type, Json::Value messageText, std::string userName = "", std::string color = ""); RoomType type(); bool isType(RoomType type); bool canDice(); unsigned int addDice(User *user, int diceValue); bool accessAllowed(std::string userName, std::string password); bool userIsInRoom(std::string userName); void addUserWhenQueueEmpty(User *user); bool userToNewRoom(User *user, std::string newRoom, std::string password); unsigned int flags(); private: struct Message { User::MsgType type; std::string messageTr; std::string userName; std::string color; }; Server *_parent; std::string _name; std::string _password; std::vector _allowedUsers; RoomType _type; std::vector _users; bool _blocked; bool _stop; std::queue _msgQueue; std::thread *thread; bool _roundRunning; time_t _roundStart; time_t _lastRoundEnd; int _roundLength; std::vector> _diceValues; std::mutex mutexQueue; void _handleDice(); void _startDiceRound(); void _endDiceRound(); void _initRound(); void _showDiceRoundResults(); }; } // namespace Lib } // namespace Yc #endif // YC_LIB_ROOM_H