#include "stdafx.h" #include "ManageToolServerDispatch.h" #include #include #include #include #include bool CManageToolServerDispatch::AuthUser(PktBase* lpPktBase) { unsigned char cError = 0; ServerManage::UserCommand* lpUserCommand = reinterpret_cast(lpPktBase); ServerManage::UserInfo* lpUserInfo = reinterpret_cast(lpUserCommand + 1); if(!ServerManage::CheckUserPacketLength(lpPktBase, 1)) { cError = ServerManage::INVALID_USER_PACKET_ERROR; } if(0 == cError) { m_UserInfo = *lpUserInfo; m_UserInfo.dwIP = GetSession().GetRemoteAddr().get_addr_in().sin_addr.S_un.S_addr; // ÀÎÁõ ¼º°ø½Ã LoginTable¿¡ »ðÀԵȴÙ. cError = CToolUserManager::GetInstance().Authorize(*this, m_UserInfo); if (cError != ServerManage::NO_USER_COMMAND_ERROR) { ERRLOG2(g_Log, "ID:%s/IP:%s/Authorize failed", m_UserInfo.szID, GetSession().GetRemoteAddr().get_addr_string()); } } if(0 == cError) { DETLOG2(g_Log, "ID:%s/IP:%s/Authorize success", m_UserInfo.szID, GetSession().GetRemoteAddr().get_addr_string()); // ´Ù¸¥ À¯Àúµé¿¡°Ô ·Î±×ÀÎ Á¤º¸¸¦ º¸³½´Ù. ServerManage::SendUserInfo(GetBufferFactory(), 0, &m_UserInfo, 1, ServerManage::CMD::UserLogin, 0); // ÇöÀç °ü¸®ÀÚ Á¤º¸¸¦ ÁØ´Ù. ServerManage::SendUserInfo(GetBufferFactory(), 0, &CToolUserManager::GetInstance().GetManageUser(), 1, ServerManage::CMD::ManagerInfo, 0); // ´Ù¸¥ À¯ÀúµéÀÇ ·Î±×ÀÎ Á¤º¸¸¦ ¹Þ´Â´Ù. CToolUserManager::GetInstance().SendAllLoginUserInfo(GetSession()); #pragma todo("¼­¹ö SetupÀ» ÁØ´Ù") } ServerManage::SendUserInfo(GetBufferFactory(), &GetSession(), &m_UserInfo, 1, ServerManage::CMD::AuthUser, cError); return (0 == cError); } bool CManageToolServerDispatch::AddUser(PktBase* lpPktBase) { unsigned char cError = 0; ServerManage::UserCommand* lpUserCommand = reinterpret_cast(lpPktBase); ServerManage::UserInfo* lpUserInfo = reinterpret_cast(lpUserCommand + 1); if(!ServerManage::CheckUserPacketLength(lpPktBase, 1)) { cError = ServerManage::INVALID_USER_PACKET_ERROR; } if(0 == cError && !CToolUserManager::GetInstance().AddUser(*lpUserInfo)) { ERRLOG3(g_Log, "ID:%s/IP:%s/Adduser failed (ID:%s)", m_UserInfo.szID, GetSession().GetRemoteAddr().get_addr_string(), lpUserInfo->szID); cError = ServerManage::ADD_USER_FAILED; } DETLOG3(g_Log, "ID:%s/IP:%s/Adduser success", m_UserInfo.szID, GetSession().GetRemoteAddr().get_addr_string(), lpUserInfo->szID); memset(lpUserInfo->szPassword, 0, ServerManage::UserInfo::PASS_LEN); return ServerManage::SendUserInfo(GetBufferFactory(), &GetSession(), lpUserInfo, 1, ServerManage::CMD::AddUser, cError); } bool CManageToolServerDispatch::DelUser(PktBase* lpPktBase) { unsigned char cError = 0; ServerManage::UserCommand* lpUserCommand = reinterpret_cast(lpPktBase); ServerManage::UserInfo* lpUserInfo = reinterpret_cast(lpUserCommand + 1); if(!ServerManage::CheckUserPacketLength(lpPktBase, 1)) { cError = ServerManage::INVALID_USER_PACKET_ERROR; } if(0 == cError && !CToolUserManager::GetInstance().DelUser(lpUserInfo->szID)) { ERRLOG3(g_Log, "ID:%s/IP:%s/Delete user failed (ID:%s)", m_UserInfo.szID, GetSession().GetRemoteAddr().get_addr_string(), lpUserInfo->szID); cError = ServerManage::DELETE_USER_FAILED; } DETLOG3(g_Log, "ID:%s/IP:%s/Delete user success", m_UserInfo.szID, GetSession().GetRemoteAddr().get_addr_string(), lpUserInfo->szID); return ServerManage::SendUserInfo(GetBufferFactory(), &GetSession(), lpUserInfo, 1, ServerManage::CMD::DelUser, cError); } bool CManageToolServerDispatch::ModUser(PktBase* lpPktBase) { unsigned char cError = 0; ServerManage::UserCommand* lpUserCommand = reinterpret_cast(lpPktBase); ServerManage::UserInfo* lpUserInfo = reinterpret_cast(lpUserCommand + 1); if(!ServerManage::CheckUserPacketLength(lpPktBase, 1)) { cError = ServerManage::INVALID_USER_PACKET_ERROR; } if(0 == cError && !CToolUserManager::GetInstance().ModifyUser(*lpUserInfo)) { ERRLOG3(g_Log, "ID:%s/IP:%s/Modify user failed (ID:%s)", m_UserInfo.szID, GetSession().GetRemoteAddr().get_addr_string(), lpUserInfo->szID); cError = ServerManage::MODIFY_USER_FAILED; } DETLOG3(g_Log, "ID:%s/IP:%s/Modify user success", m_UserInfo.szID, GetSession().GetRemoteAddr().get_addr_string(), lpUserInfo->szID); memset(lpUserInfo->szPassword, 0, ServerManage::UserInfo::PASS_LEN); return ServerManage::SendUserInfo(GetBufferFactory(), &GetSession(), lpUserInfo, 1, ServerManage::CMD::ModUser, cError); } bool CManageToolServerDispatch::UserList(PktBase* lpPktBase) { unsigned char cError = 0; ServerManage::UserCommand* lpUserCommand = reinterpret_cast(lpPktBase); if(!ServerManage::CheckUserPacketLength(lpPktBase, 0)) { cError = ServerManage::INVALID_USER_PACKET_ERROR; } if(0 == cError && !CToolUserManager::GetInstance().SendAllUserInfo(GetSession())) { ERRLOG2(g_Log, "ID:%s/IP:%s/Send userlist failed", m_UserInfo.szID, GetSession().GetRemoteAddr().get_addr_string()); cError = ServerManage::SEND_USER_LIST_FAILED; } DETLOG2(g_Log, "ID:%s/IP:%s/Send userlist success", m_UserInfo.szID, GetSession().GetRemoteAddr().get_addr_string()); return ServerManage::SendUserInfo(GetBufferFactory(), &GetSession(), 0, 0, ServerManage::CMD::UserList, cError); } bool CManageToolServerDispatch::RequestPromote(PktBase* lpPktBase) { unsigned char cError = 0; ServerManage::UserCommand* lpUserCommand = reinterpret_cast(lpPktBase); ServerManage::UserInfo* lpUserInfo = reinterpret_cast(lpUserCommand + 1); if(!ServerManage::CheckUserPacketLength(lpPktBase, 1)) { cError = ServerManage::INVALID_USER_PACKET_ERROR; } if(0 == cError) { const ServerManage::UserInfo& masterUser = CToolUserManager::GetInstance().GetManageUser(); if(0 == masterUser.szID[0] || m_UserInfo.usAdminLevel == CToolUserManager::MASTER) { // ÇöÀç PromoteÀ¯Àú°¡ ÀÖ´ÂÁö »ìÇÉ´Ù. ¾ø°Å³ª, Master¸é ¹Ù·Î Promote¸¦ Çϰí Broadcast¸¦ ÇÑ´Ù. CToolUserManager::GetInstance().Promote(m_UserInfo); ServerManage::SendUserInfo(GetBufferFactory(), 0, &m_UserInfo, 1, ServerManage::CMD::ManagerInfo, 0); } else if(m_UserInfo.usAdminLevel == CToolUserManager::GENERAL) { // ÇöÀç PromoteÀ¯Àú°¡ ÀÖ°í, ³»°¡ General·¹º§À̸é, Á¤ÁßÈ÷ ¿äûÀ» ÇÑ´Ù. CManageToolServerDispatch* lpToolUserDispatch = CToolUserManager::GetInstance().GetManageUserDispatch(); ServerManage::UserInfo userInfo = m_UserInfo; userInfo.usSubCommand = ServerManage::CMD::REQUEST_TAKEBACK_PROMOTE; // ¾ÆÁ÷ ¿¬°áµÇ¾î ÀÖÀ¸¸é ¿äû ÆÐŶÀ» º¸³¿. if(0 == lpToolUserDispatch || !ServerManage::SendUserInfo(GetBufferFactory(), &lpToolUserDispatch->GetSession(), &userInfo, 1, ServerManage::CMD::RequestUserReaction, 0)) { cError = ServerManage::PROMOTE_TAKEBACK_FAILED; } } else { cError = ServerManage::PROMOTE_USER_FAILED; } } if(0 != cError) { ERRLOG3(g_Log, "ID:%s/IP:%s/Promote user failed (ID:%s)", m_UserInfo.szID, GetSession().GetRemoteAddr().get_addr_string(), lpUserInfo->szID); ServerManage::SendUserInfo(GetBufferFactory(), &GetSession(), 0, 0, ServerManage::CMD::RequestPromote, cError); } return true; } bool CManageToolServerDispatch::ProcessUserReaction(PktBase* lpPktBase) { unsigned char cError = 0; ServerManage::UserCommand* lpUserCommand = reinterpret_cast(lpPktBase); ServerManage::UserInfo* lpUserInfo = reinterpret_cast(lpUserCommand + 1); if(!ServerManage::CheckUserPacketLength(lpPktBase, 1)) { cError = ServerManage::INVALID_USER_PACKET_ERROR; } CManageToolServerDispatch* lpRequestDispatch = 0; if(0 == cError) { switch(lpUserInfo->usSubCommand) { case ServerManage::CMD::ACK_TAKEBACK_PROMOTE: // óÀ½ ¿äûÀÚ¸¦ ã¾Æ¼­ Promote ¼º°ø ÆÐŶÀ» º¸³½´Ù. lpRequestDispatch = CToolUserManager::GetInstance().GetUserDispatch(lpUserInfo->szID); if(0 != lpRequestDispatch) { ServerManage::UserInfo manager = lpRequestDispatch->GetUserInfo(); // Promote ó¸®. CToolUserManager::GetInstance().Promote(manager); // ´©°¡ ManagerÀÎÁö ¸¸ÃµÇÏ¿¡ ¾Ë¸°´Ù. ServerManage::SendUserInfo(GetBufferFactory(), 0, &manager, 1, ServerManage::CMD::ManagerInfo, 0); // º»Àο¡°Ô Ack. ServerManage::SendUserInfo(GetBufferFactory(), &lpRequestDispatch->GetSession(), &manager, 1, ServerManage::CMD::RequestPromote, 0); } break; case ServerManage::CMD::NAK_TAKEBACK_PROMOTE: // óÀ½ ¿äûÀÚ¸¦ ã¾Æ¼­ Promote ½ÇÆÐ ÆÐŶÀ» º¸³½´Ù. lpRequestDispatch = CToolUserManager::GetInstance().GetUserDispatch(lpUserInfo->szID); if(0 != lpRequestDispatch) { ServerManage::SendUserInfo(GetBufferFactory(), &lpRequestDispatch->GetSession(), &m_UserInfo, 1, ServerManage::CMD::RequestPromote, ServerManage::REJECTED_PROMOTE_USER); } break; } } return true; }