📄 drservermanager.cpp
字号:
// -----------------------------
// Wrote by chan78 at 2001/03/16
// -----------------------------
#include "DrServerManager.h"
#include "Proxy.h"
#ifdef __IS_PROXY_SERVER
bool AnswerToManager( LP_MANAGER_PACKET pPacket, DWORD dwLength )
{
pPacket->h.bPTCL = PTCL_MANAGER_ANSWER;
return g_pUserTable->SendToUser( pPacket->h.uTarget.dwTargetManagerID, (char *)pPacket, dwLength );
}
#else
bool AnswerToManager( LP_MANAGER_PACKET pPacket, DWORD dwLength )
{
pPacket->h.bPTCL = PTCL_MANAGER_ANSWER;
// 泅犁肺急 橇遏矫 辑滚啊 窍唱挥捞骨肺.
return g_pServerTable->SendToProxyServer( (char*)pPacket, dwLength );
}
#endif
// -------------------------------------------------------------------
// PROXY SERVER 侩
// -------------------------------------------------------------------
#ifdef __IS_PROXY_SERVER
bool OnRecvAuthMsgFromManager( USERINFO *pUserInfo, LP_MANAGER_PACKET pPacket, DWORD dwLength )
{
if( dwLength != sizeof( MANAGER_PACKET ) )
{
TRACE( "=============> SIZE:%d LENGTH : %d\n", dwLength, sizeof( MANAGER_PACKET ));
return false;
}
if( pPacket->h.bPTCL != PTCL_MANAGER_QUERY )
{
return false;
}
if( pPacket->h.wCMD != MANAGER_CMD_AUTH )
{
return false;
}
// if( pPacket->h.uTarget.wTargetServerID != g_pServerTable->GetOwnServerData()->wPort )
// {
// return false;
// }
if( strcmp(pPacket->b.MgrRequestAuthPacket.szID, MANAGER_ID) )
{
return false;
}
if( strcmp(pPacket->b.MgrRequestAuthPacket.szPasswd, MANAGER_PASSWD) )
{
return false;
}
const int availablenum = GetPrivateProfileInt( "server_manager", "num_of_available_manager_ip", 0, SERVER_MANAGER_INI_ );
if( availablenum <= 0 ) return false;
for (int i = 0; i < availablenum; i ++)
{
char sDummyIP[MM_IP_LENGTH];
char keyname[ FILENAME_MAX ];
memset( sDummyIP, 0, MM_IP_LENGTH );
sprintf( keyname, "manager_ip%d", i );
GetPrivateProfileString( "server_manager", keyname, "", sDummyIP, sizeof(sDummyIP), SERVER_MANAGER_INI_ );
if( !strcmp(pUserInfo->szIP, sDummyIP) ) goto SUCCESS__;
}
return false;
SUCCESS__:
return true;
}
// 20010508 ADD
void AnswerAuthPacket( USERINFO* pUserInfo)
{
char szSendMsg[MM_MAX_PACKET_SIZE];
LP_MANAGER_PACKET pSendPacket = (LP_MANAGER_PACKET)szSendMsg;
// 固府 盲况敌促. Answer 侩.
pSendPacket->h.bPTCL = PTCL_MANAGER_ANSWER;
pSendPacket->h.wCMD = MANAGER_CMD_AUTH;
pSendPacket->h.uTarget.dwTargetManagerID = pUserInfo->dwID;
pSendPacket->b.MgrAnswerAuthPacket.wPort = g_pServerTable->GetOwnServerData()->wPort;
if( !AnswerToManager( pSendPacket, sizeof(MANAGER_PACKET_HEADER) + sizeof(MGR_ANSWER_AUTH_PACKET) ) )
{
MyLog( LOG_NORMAL, "RESPONSE_FIRST_PACKET :: Failed To Answer" );
}
}
bool OnRecvMsgFromManager( USERINFO *pUserInfo, LP_MANAGER_PACKET pPacket, DWORD dwLength )
{
char szSendMsg[MM_MAX_PACKET_SIZE];
LP_MANAGER_PACKET pSendPacket = (LP_MANAGER_PACKET)szSendMsg;
// 固府 盲况敌促. Answer 侩.
pSendPacket->h.bPTCL = PTCL_MANAGER_ANSWER;
pSendPacket->h.uTarget.dwTargetManagerID = pUserInfo->dwID;
// PROXY SERVER 牢 版快浚 捞 窃荐肺 逞败柳 菩哦狼 鸥百捞 郴啊 酒匆荐档 乐促.
// 促弗 辑滚肺 府促捞泛记.
if( pPacket->h.uTarget.wTargetServerID != g_pServerTable->GetOwnServerData()->wPort )
{
// 郴啊 贸府且 菩哦捞 酒聪促. Redirection.
LP_SERVER_DATA pServerData = g_pServerTable->GetServerData( pPacket->h.uTarget.wTargetServerID );
// 鸥百 辑滚啊 绝芭唱 立加登绢乐瘤 臼促.
if( !pServerData || !pServerData->dwConnectionIndex )
{
if( !AnswerToManager( pSendPacket, sizeof(MANAGER_PACKET_HEADER) ) )
{
MyLog( LOG_IMPORTANT, "MANAGER_CMD_TARGET_NOT_AVAILABLE :: Failed To Answer(dwID: %d, TargetServer:%d)", pUserInfo->dwID, pPacket->h.uTarget );
return true;
}
}
else
{
if( !g_pServerTable->Send( pServerData->dwConnectionIndex, (char *)pPacket, dwLength ) )
{
MyLog( LOG_IMPORTANT, "Failed To Send 'PTCL_MANAGER_QUERY' to (%d/Port:%d)", pServerData->dwConnectionIndex, pServerData->wPort );
}
}
return true;
}
// PROXY啊 流立 贸府且 巴甸.
switch( pPacket->h.wCMD )
{
case MANAGER_CMD_REQUEST_SERVER_INFO:
{
pSendPacket->h.wCMD = MANAGER_CMD_REQUEST_SERVER_INFO;
pSendPacket->b.MgrServerInfoPacket.bIsUserAcceptAllow = g_pServerTable->IsUserAcceptAllowed();
pSendPacket->b.MgrServerInfoPacket.dwNumOfMaxUser = g_pProxy->dwMaxUser;
pSendPacket->b.MgrServerInfoPacket.NumOfLimit = g_pProxy->bLimitLoginTryPerSec;
if( !AnswerToManager( pSendPacket, sizeof(MANAGER_PACKET_HEADER) + sizeof(MGR_SERVER_INFO_PACKET) ) )
{
MyLog( LOG_NORMAL, "MANAGER_CMD_REQUEST_SERVER_INFO :: Failed To Answer" );
break;
}
}
break;
case MANAGER_CMD_REQUEST_SERVER_SUBLIST:
{
DWORD i = 0;
LP_SERVER_DATA pServerData;
pSendPacket->h.wCMD = MANAGER_CMD_REQUEST_SERVER_SUBLIST;
pSendPacket->b.MgrServerSubListPacket.wSubTotalNum = g_pServerTable->GetNumOfServers();
for( pServerData = g_pServerTable->GetServerListHead(); pServerData; pServerData = pServerData->pNextServerData )
{
pSendPacket->b.MgrServerSubListPacket.wPort[i] = pServerData->wPort;
i++;
}
if( !AnswerToManager( pSendPacket, sizeof(MANAGER_PACKET_HEADER) + sizeof(DWORD) + sizeof(WORD) * i) )
{
MyLog( LOG_NORMAL, "MANAGER_CMD_REQUEST_SERVER_SUBLIST :: Failed To Answer" );
break;
}
}
break;
case MANAGER_CMD_REQUEST_SERVER_STATUS:
{
pSendPacket->h.wCMD = MANAGER_CMD_REQUEST_SERVER_STATUS;
//ServerSet狼 醚 牢盔
pSendPacket->b.MgrServerStatusPacket.dwNumOfUsers = g_pServerTable->GetNumOfUsersInServerSet();
pSendPacket->b.MgrServerStatusPacket.dwStatus = g_pServerTable->GetOwnServerData()->dwStatus;
pSendPacket->b.MgrServerStatusPacket.wSubConnectionNum = g_pServerTable->GetNumOfConnectedServers();
if( !AnswerToManager( pSendPacket, sizeof(MANAGER_PACKET_HEADER) +sizeof(MGR_SERVER_STATUS_PACKET) ) )
{
MyLog( LOG_NORMAL, "MANAGER_CMD_REQUEST_SERVER_STATUS :: Failed To Answer" );
break;
}
}
break;
case MANAGER_CMD_REQUEST_SUBSERVER_INFO:
{
pSendPacket->h.wCMD = MANAGER_CMD_REQUEST_SUBSERVER_INFO;
LP_SERVER_DATA pServerData = g_pServerTable->GetServerData( pPacket->b.MgrSubServerRequestPacket.wPort );
if( pServerData != NULL )
{
pSendPacket->b.MgrSubServerInfoPacket.wType = pServerData->dwServerType;
strcpy( pSendPacket->b.MgrSubServerInfoPacket.szIp, pServerData->szIP );
if( !AnswerToManager( pSendPacket, sizeof(MANAGER_PACKET_HEADER) + sizeof(MGR_SUBSERVER_INFO_PACKET) ) )
{
MyLog( LOG_NORMAL, "MANAGER_CMD_REQUEST_SUBSERVER_INFO :: Failed To Answer" );
break;
}
}
else
{
MyLog( LOG_NORMAL, "MANAGER_CMD_REQUEST_SUBSERVER_INFO :: Failed To Answer" );
break;
}
}
break;
//辑宏 辑滚 惑怕 夸备(map, agent, db)
case MANAGER_CMD_REQUEST_SUBSERVER_STATUS:
{
pSendPacket->h.wCMD = MANAGER_CMD_REQUEST_SUBSERVER_STATUS;
LP_SERVER_DATA pServerData = g_pServerTable->GetServerData( pPacket->b.MgrSubServerRequestPacket.wPort );
if( pServerData != NULL )
{
pSendPacket->b.MgrServerStatusPacket.dwStatus = pServerData->dwStatus;
pSendPacket->b.MgrServerStatusPacket.dwNumOfUsers = pServerData->dwNumOfUsers;
if( !AnswerToManager( pSendPacket, sizeof(MANAGER_PACKET_HEADER) + (sizeof(DWORD) * 2) ) )
{
MyLog( LOG_NORMAL, "MANAGER_CMD_REQUEST_SUBSERVER_STATUS :: Failed To Answer" );
break;
}
}
else
{
MyLog( LOG_NORMAL, "MANAGER_CMD_REQUEST_SUBSERVER_STATUS :: Failed To Answer" );
break;
}
}
break;
case MANAGER_CMD_CONTROL_USER_ALLOW:
{
if( pPacket->b.MgrUserAllowPacket.bIsUserAcceptAllow == true )
{
if( g_pServerTable->IsUserAcceptAllowed() != true )
{
g_pServerTable->ToggleUserAcceptAllowed();
MyLog( LOG_NORMAL, "USER ACCEPT ALLOWED by Key Event" );
}
}
else
{
if( g_pServerTable->IsUserAcceptAllowed() == true )
{
g_pServerTable->ToggleUserAcceptAllowed();
MyLog( LOG_NORMAL, "USER ACCEPT STOPED by Key Event" );
}
}
}
break;
case MANAGER_CMD_CONTROL_SERVER_MAXUSER:
{
g_pProxy->dwMaxUser = pPacket->b.MgrServerMaxUserPacket.dwNumOfMaxUser;
MyLog( LOG_NORMAL, "MAX USER ADJUST: %d users can login this set. F3 -, F4 +",g_pProxy->dwMaxUser);
}
break;
case MANAGER_CMD_CONTROL_SERVER_LIMITUSER:
{
g_pProxy->bLimitLoginTryPerSec = pPacket->b.MgrServerLimitUserPacket.NumOfLimit;
MyLog( LOG_NORMAL, "Login Try LIMIT: %d users can login per sec now. F7 +, F8 -",g_pProxy->bLimitLoginTryPerSec);
}
break;
case MANAGER_CMD_REQUEST_SERVER_SHUTDOWN:
{
if( pPacket->b.MgrServerShutDownPacket.wPort != g_pServerTable->GetOwnServerData()->wPort )
{
LP_SERVER_DATA pServerData = g_pServerTable->GetServerData( pPacket->b.MgrServerShutDownPacket.wPort );
g_pServerTable->DestroyOtherServer( pServerData );
}
else
{
g_pServerTable->DestroyServer( FINISH_TYPE_NORMAL );
}
}
break;
case MANAGER_CMD_PUBLIC_NOTICE:
{
MANAGER_TO_MAP_PACKET PacketToMap;
char dummy[612];
int len;
PacketToMap.h.header.type = CMD_BBS;
PacketToMap.h.header.size = pPacket->b.MgrPublicNoticePacket.wLengthOfMsg;
strncpy( PacketToMap.u.PublicNotice.msg, pPacket->b.MgrPublicNoticePacket.szMessage, PacketToMap.h.header.size );
len = sizeof( PacketToMap.h ) + PacketToMap.h.header.size;
dummy[0] = (BYTE)PTCL_BROADCAST_TO_SERVERS;
memcpy( dummy+1, (char*)&PacketToMap, len );
LP_SERVER_DATA pServerData = g_pServerTable->GetServerData( pPacket->b.MgrPublicNoticePacket.wPort );
if( !g_pServerTable->Send( pServerData->dwConnectionIndex, (char *)dummy, len+1 ) )
{
MyLog( LOG_IMPORTANT, "Failed To Send For Public Notice" );
}
}
break;
default:
{
return false;
}
}
return true;
}
#endif
// -------------------------------------------------------------------
// Agent SERVER 侩
// -------------------------------------------------------------------
#ifdef __IS_AGENT_SERVER
bool OnRecvMsgFromManager( LP_MANAGER_PACKET pPacket, DWORD dwLength )
{
char szSendMsg[MM_MAX_PACKET_SIZE];
LP_MANAGER_PACKET pSendPacket = (LP_MANAGER_PACKET)szSendMsg;
// 固府 盲况敌促. Answer 侩.
pSendPacket->h.bPTCL = PTCL_MANAGER_ANSWER;
pSendPacket->h.uTarget.dwTargetManagerID = pPacket->h.uTarget.dwTargetManagerID;
switch( pPacket->h.wCMD )
{
case MANAGER_CMD_REQUEST_SERVER_STATUS:
{
pSendPacket->h.wCMD = MANAGER_CMD_REQUEST_SERVERSET_STATUS;
pSendPacket->b.MgrServerStatusPacket.dwNumOfUsers = g_pUserTable->GetUserNum();
pSendPacket->b.MgrServerStatusPacket.dwTotalServerConnections = g_pServerTable->GetNumOfConnectedServers();
pSendPacket->b.MgrServerStatusPacket.dwStatus = g_pServerTable->GetOwnServerData()->dwStatus;
sprintf( pSendPacket->b.MgrServerStatusPacket.szServerName, "AGENT SERVER(%d)", g_pServerTable->GetOwnServerData()->wPort );
if( !AnswerToManager( pSendPacket, sizeof(MANAGER_PACKET) ) )
{
MyLog( LOG_NORMAL, "MANAGER_CMD_REQUEST_SERVER_STATUS :: Failed To Answer" );
break;
}
}
break;
default:
{
return false;
}
}
return true;
}
#endif
// -------------------------------------------------------------------
// Map SERVER 侩
// -------------------------------------------------------------------
#ifdef __IS_MAP_SERVER
extern char MapName[ MAX_PATH];
bool OnRecvMsgFromManager( LP_MANAGER_PACKET pPacket, DWORD dwLength )
{
char szSendMsg[MM_MAX_PACKET_SIZE];
LP_MANAGER_PACKET pSendPacket = (LP_MANAGER_PACKET)szSendMsg;
// 固府 盲况敌促. Answer 侩.
pSendPacket->h.bPTCL = PTCL_MANAGER_ANSWER;
pSendPacket->h.uTarget.dwTargetManagerID = pPacket->h.uTarget.dwTargetManagerID;
switch( pPacket->h.wCMD )
{
case MANAGER_CMD_REQUEST_SERVER_STATUS:
{
pSendPacket->h.wCMD = MANAGER_CMD_REQUEST_SERVERSET_STATUS;
pSendPacket->b.MgrServerStatusPacket.dwNumOfUsers = g_pServerTable->GetNumOfUsers();
pSendPacket->b.MgrServerStatusPacket.dwTotalServerConnections = g_pServerTable->GetNumOfConnectedServers();
pSendPacket->b.MgrServerStatusPacket.dwStatus = g_pServerTable->GetOwnServerData()->dwStatus;
sprintf( pSendPacket->b.MgrServerStatusPacket.szServerName, "MAP SERVER(%d/%s)", g_pServerTable->GetOwnServerData()->wPort, MapName );
if( !AnswerToManager( pSendPacket, sizeof(MANAGER_PACKET) ) )
{
MyLog( LOG_NORMAL, "MANAGER_CMD_REQUEST_SERVER_STATUS :: Failed To Answer" );
break;
}
}
break;
default:
{
return false;
}
}
return true;
}
#endif
// -------------------------------------------------------------------
// DB Demon 侩
// -------------------------------------------------------------------
#ifdef __IS_DB_DEMON
bool OnRecvMsgFromManager( LP_MANAGER_PACKET pPacket, DWORD dwLength )
{
char szSendMsg[MM_MAX_PACKET_SIZE];
LP_MANAGER_PACKET pSendPacket = (LP_MANAGER_PACKET)szSendMsg;
// 固府 盲况敌促. Answer 侩.
pSendPacket->h.bPTCL = PTCL_MANAGER_ANSWER;
pSendPacket->h.uTarget.dwTargetManagerID = pPacket->h.uTarget.dwTargetManagerID;
switch( pPacket->h.wCMD )
{
case MANAGER_CMD_REQUEST_SERVER_STATUS:
{
pSendPacket->h.wCMD = MANAGER_CMD_REQUEST_SERVERSET_STATUS;
pSendPacket->b.MgrServerStatusPacket.dwNumOfUsers = g_pServerTable->GetNumOfUsers();
pSendPacket->b.MgrServerStatusPacket.dwTotalServerConnections = g_pServerTable->GetNumOfConnectedServers();
pSendPacket->b.MgrServerStatusPacket.dwStatus = g_pServerTable->GetOwnServerData()->dwStatus;
sprintf( pSendPacket->b.MgrServerStatusPacket.szServerName, "DB DEMON(%d)", g_pServerTable->GetOwnServerData()->wPort );
if( !AnswerToManager( pSendPacket, sizeof(MANAGER_PACKET) ) )
{
MyLog( LOG_NORMAL, "MANAGER_CMD_REQUEST_SERVER_STATUS :: Failed To Answer" );
break;
}
}
break;
default:
{
return false;
}
}
return true;
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -