⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 server.cpp

📁 国内著名网络游戏dragon的服务端完整源码 内附完整数据库结构
💻 CPP
📖 第 1 页 / 共 2 页
字号:
#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 + -