📄 server.cpp
字号:
#include "server.h"
#include "typedef.h"
#include "usertable.h"
#include "servertable.h"
#include "network_guid.h"
#include "recvmsg.h"
#include "monitor.h"
#include "Proxy.h"
#include "dr_agent_structures.h"
#include "RMTable.h"
#include "RMDefine.h"
#include "UserManager.h"
I4DyuchiNET* g_pINet = NULL;
char buffer1[512];
WORD g_wCurDay; //泅犁 朝楼甫 历厘 窍绰 傈开函荐
WORD g_wCurMonth; //泅犁 崔(month)阑 历厘 窍绰 傈开函荐
extern CUserManager g_mgrUser;
void DisplayProxyData()
{
MyLog( LOG_NORMAL, "TOTAL <%d/(Failed:%d)> CONNECTIONS FROM SERVER START", g_pProxy->dwTotalLogUser, g_pProxy->dwFailtoAllocUserNum );
MyLog( LOG_NORMAL, "TOTAL <Users:%d/ServerMonitor:%d> ARE CONNECTIONS ARE AVAILABLE NOW", g_pUserTable->GetUserNum(), 0 );
if(g_pProxy->bLimitLoginTryPerSec)
MyLog( LOG_NORMAL, "Login Try Limit: %d users can login per sec now. F7 +, F8 -",g_pProxy->bLimitLoginTryPerSec);
else MyLog( LOG_NORMAL, "Proxy Login unlimit");
if (g_pProxy->dwFailtoAllocUserNum)
{
MyLog( LOG_FATAL, "-- TOTAL <%d> ALLOC FAILED CONNECTIONS", g_pProxy->dwFailtoAllocUserNum );
}
return;
}
//
void LogUserNumInfo()
{
FILE *fp;
static int max_total_user;
DWORD total_user = g_pServerTable->GetNumOfUsersInServerSet();
time_t lTime;
struct tm *today;
time( &lTime );
today = localtime( &lTime );
char tempname[ FILENAME_MAX];
sprintf( tempname, "CurrentUserNumber_%04d%02d%02d.txt", today->tm_year+1900, today->tm_mon+1, today->tm_mday );
fp = fopen( tempname, "at+");
if( fp )
{
fprintf( fp, "%02d.%02d %02d:%02d %5d ", today->tm_mon+1,
today->tm_mday,
today->tm_hour,
today->tm_min,
total_user );
for( int i = 0 ; i < total_user / 50 ; i ++)
{
fprintf( fp, "*", fp);
}
fprintf( fp, "\n" );
fclose(fp);
}
}
void __stdcall ShowServerStatus(DWORD dwValue)//020511 lsw
{
if( g_pServerTable )
{
LocalMgr.DisplayLocalizingSet();//021007 lsw
g_pServerTable->ShowServerStatus();
DisplayProxyData();
}
else
{
MyLog( LOG_JUST_DISPLAY, "<< g_pServerTable Is not available >>" );
}
}
void __stdcall ShowServerStatusDetail(DWORD dwValue)//020511 lsw
{
DWORD dwCount = 0;
if( g_pServerTable )
{
LP_SERVER_DATA pDummyServerData = g_pServerTable->GetServerListHead();
while( pDummyServerData )
{
dwCount++;
MyLog( LOG_NORMAL, "<< %2d / %12s / %4d >> UsingDB: %4d(%6d), NumOfUsers: %4d, Status: %c >>"
, dwCount
, GetTypedServerText(pDummyServerData->dwServerType)
, pDummyServerData->wPort
, (pDummyServerData->pUsingDBDemon?pDummyServerData->pUsingDBDemon->wPort:0)
, (pDummyServerData->pUsingDBDemon?g_pServerTable->GetDBLoad( pDummyServerData->pUsingDBDemon ):0)
, pDummyServerData->dwNumOfUsers
, ServerStatusSymbols[pDummyServerData->dwStatus] );
pDummyServerData = pDummyServerData->pNextServerData;
}
MyLog( LOG_NORMAL, "-- Total %d Servers are listed", dwCount );
}
else
{
MyLog( LOG_JUST_DISPLAY, "<< g_pServerTable Is not available >>" );
}
}
// DB Demon 肺靛甫 林扁利栏肺 炼沥茄促
void __stdcall ReBalanceDBLoad(DWORD dwValue)//020511 lsw
{
if( g_pServerTable )
{
g_pServerTable->ReBalanceDBDemonSettings();
}
else
{
MyLog( LOG_FATAL, "ReBalanceDBLoad() :: g_pServerTable Is NULL!!!" );
}
return;
}
// 葛电 辑滚俊霸 惑怕 焊绊甫 夸备茄促.
void __stdcall OrderToReportServerStatus(DWORD dwValue)//020511 lsw
{
// add by slowboat
LogUserNumInfo();
LP_SERVER_DATA pCur = NULL;
DWORD dwCount = 0;
DWORD dwTotal = 0;
pCur = g_pServerTable->GetServerListHead();
while( pCur )
{
// Target篮 立加等 葛电 辑滚.
if( pCur->dwConnectionIndex )
{
dwTotal++;
if( g_pServerTable->OrderToReportServerStatus( pCur ) )
{
dwCount++;
}
else
{
#ifdef __ON_DEBUG
// _asm int 3;
#endif
}
}
pCur = pCur->pNextServerData;
}
MyLog( LOG_NORMAL, "PROXY Ordered to Servers to Report Server Status. (%d/%d) Servers are Listen.", dwCount, dwTotal);
// added by slowboat
// to calculate user num of server set. don't delete it.
g_pServerTable->ShowServerStatus();
return;
}
void __stdcall DestroyAllServers(DWORD dwValue)//020511 lsw
{
LP_SERVER_DATA pDummyServerData;
if( !g_pServerTable )
{
return;
}
for( pDummyServerData = g_pServerTable->GetServerListHead(); pDummyServerData; pDummyServerData = pDummyServerData->pNextServerData )
{
if( pDummyServerData->dwConnectionIndex )
{
g_pServerTable->DestroyOtherServer( pDummyServerData );
}
}
return;
}
void __stdcall ShowServerConnections(DWORD dwValue)//020511 lsw
{
if( !g_pServerTable )
{
return;
}
else
{
g_pServerTable->ShowServerConnectionStatus();
}
}
void __stdcall TimerForUserTable(DWORD dwValue)//020511 lsw
{
g_mgrUser.DelLogout(); // CSD-030509
g_pProxy->bTryLoginThisSec = 0; // Reset
if( g_pUserTable )
{
// 立加辆丰 措扁 贸府侩.
DWORD dwCount = g_pUserTable->CloseConnectionWithAwaitingToDisconnect();
if( dwCount )
{
// 嘎绰促绊 积阿窍绊 肺弊窍瘤 臼绰促.
// MyLog( LOG_NORMAL, "TimerForUserTable() :: (%d/%d) Timed out connections are cleared.", dwCount, g_pUserTable->GetUserNum() );
}
}
return;
}
void __stdcall IncreseLimitUserLogin(DWORD dwValue)//020511 lsw
{
if (g_pProxy->bLimitLoginTryPerSec < 30)
g_pProxy->bLimitLoginTryPerSec++;
if (g_pProxy->bLimitLoginTryPerSec)
MyLog( LOG_NORMAL, "Login Try LIMIT: %d users can login per sec now. F7 +, F8 -",g_pProxy->bLimitLoginTryPerSec);
else
MyLog( LOG_NORMAL, "Login Try UNLIMIT. F7 +, F8 -");
}
void __stdcall DecreseLimitUserLogin(DWORD dwValue)//020511 lsw
{
if (g_pProxy->bLimitLoginTryPerSec)
g_pProxy->bLimitLoginTryPerSec--;
if (g_pProxy->bLimitLoginTryPerSec)
MyLog( LOG_NORMAL, "Login Try LIMIT: %d users can login per sec now. F7 +, F8 -",g_pProxy->bLimitLoginTryPerSec);
else MyLog( LOG_NORMAL, "Login Try UNLIMIT. F7 +, F8 -");
}
void __stdcall IncreseMaxUser(DWORD dwValue)//020511 lsw
{
g_pProxy->dwMaxUser+=100;
MyLog( LOG_NORMAL, "MAX USER ADJUST: %d users can login this set. F3 -, F4 +",g_pProxy->dwMaxUser);
}
void __stdcall DecreseMaxUser(DWORD dwValue)//020511 lsw
{
if (g_pProxy->dwMaxUser)
g_pProxy->dwMaxUser-=100;
MyLog( LOG_NORMAL, "MAX USER ADJUST: %d users can login this set. F3 -, F4 +",g_pProxy->dwMaxUser);
}
// 011012 KBS ; 朝楼 函版 Check 窃荐
void __stdcall CheckDay(DWORD dwValue)//020511 lsw
{
SYSTEMTIME time;
GetLocalTime(&time);
BYTE bChanged = 1; //朝(day)父 函版登菌栏搁 1, 朝苞 崔(month) 笛促 函版 登菌栏搁 2
//崔捞 官差菌阑锭
if(time.wMonth != g_wCurMonth)
{
g_wCurMonth = time.wMonth; //崔(month) 盎脚
bChanged++;
}
//朝楼啊 官差菌阑锭
if(time.wDay != g_wCurDay)
{
g_wCurDay = time.wDay; //朝楼 盎脚
t_send_map_change_date packet(bChanged, g_wCurDay, g_wCurMonth);
//g_pServerTable->BroadCastToEveryServer((char*)&packet, packet.GetPacketSize(), SERVER_TYPE_MAP);
g_pServerTable->BroadCastMapServer((char*)&packet, packet.GetPacketSize());
//g_pINet->SendToServer(1, (char*)&packet, packet.GetPacketSize(), FLAG_SEND_NOT_ENCRYPTION);
}
}
//
// 011012 KBS ; 辑滚 Start矫俊 泅犁 崔苞 朝楼甫 悸泼窍绰 窃荐
void SetCurrentDate()
{
SYSTEMTIME time;
GetLocalTime(&time);
g_wCurMonth = time.wMonth;
g_wCurDay = time.wDay;
}
//
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -