#ifndef _GM_MANAGE_LIB_TOOL_USER_MANAGE_TABLE_H_ #define _GM_MANAGE_LIB_TOOL_USER_MANAGE_TABLE_H_ #include #include // forward decl. class CManageServerDB; class CSession; class CManageToolServerDispatch; class CToolUserManager { public: typedef std::list UserList; enum Level { MASTER = 0, GENERAL = 1, MONITORING = 2 }; static CToolUserManager& GetInstance(); // UserManagement ( Use File Database ) bool AddUser(const ServerManage::UserInfo& userInfo); bool DelUser(const char* szID); bool ModifyUser(const ServerManage::UserInfo& modified); bool GetUserInfo(const char* szID_In, ServerManage::UserInfo& userInfo_Out); bool GetUserInfo(UserList& userList_Out); // Login/Logout (In Server) ServerManage::UserCommandError Authorize( CManageToolServerDispatch& dispatch, ServerManage::UserInfo& userInfo_inout); bool IsLogin(const char* szName); bool Logout(const char* szName); // Send packets to all users bool SendToAllLoginUser(const char* szBuffer, unsigned short usBufferSize, unsigned char cCmd_In); bool SendAllLoginUserInfo(CSession& Session); bool SendAllUserInfo(CSession& Session); // ProcessAll template void ProcessCurrentUser(FnProcess fnProcess) { CurrentUserList::iterator pos = m_LoginUserList.begin(); CurrentUserList::iterator end = m_LoginUserList.end(); for(;pos != end; ++pos) { fnProcess(*pos->m_lpDispatch); } } CManageToolServerDispatch* GetUserDispatch(unsigned long dwIP); CManageToolServerDispatch* GetUserDispatch(const char* szID); void Promote(const ServerManage::UserInfo& promoteUser) { m_ManageUser = promoteUser; } bool IsManageUser(const ServerManage::UserInfo& UserInfo); const ServerManage::UserInfo& GetManageUser() const { return m_ManageUser; } CManageToolServerDispatch* GetManageUserDispatch() { return GetUserDispatch(m_ManageUser.szID); } private: CToolUserManager(CManageServerDB& ManageServerDB); ~CToolUserManager(); struct ToolUser { CManageToolServerDispatch* m_lpDispatch; ServerManage::UserInfo m_UserInfo; ToolUser(); ToolUser(CManageToolServerDispatch* lpDispatch, ServerManage::UserInfo& userInfo); }; typedef std::list CurrentUserList; CManageServerDB& m_ManageServerDB; CurrentUserList m_LoginUserList; // Logged user list; ServerManage::UserInfo m_ManageUser; // Current master user list; }; #endif