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

📄 servercontrol.cpp

📁 网络游戏龙族服务器端管理工具 rmtool 源代码
💻 CPP
📖 第 1 页 / 共 3 页
字号:
// ServerControl.cpp : implementation file
//

#include "stdafx.h"
#include "MainFrm.h"
#include "rmtool.h"
#include "ServerControl.h"
#include "ServerView.h"
#include "packet.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CServerControl dialog

CServerControl::CServerControl(CWnd* pParent /*=NULL*/)
	: CDialog(CServerControl::IDD, pParent)
{
	//{{AFX_DATA_INIT(CServerControl)
	m_CheckDBDemon = FALSE;
	m_CheckMap = FALSE;
	m_CheckAgent = FALSE;
	m_TryToConnect = 0;
	m_MaxUser = 0;
	m_UserAccept = FALSE;
	m_CheckNotice = FALSE;
	m_NoticeSec = 0;
	m_szNotice = _T("");
	m_RadioWeather = -1;
	m_WeatherAmount = 0;
	m_CheckStopWeather = FALSE;
	//}}AFX_DATA_INIT
	m_bCloseBatch = 0;
	
}


void CServerControl::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CServerControl)
	DDX_Control(pDX, IDC_NOTICE, c_NoticeMsg);
	DDX_Control(pDX, IDC_WEATHER_AMOUNT, c_WeatherAmount);
	DDX_Control(pDX, IDC_SPIN_WEATHER, c_Weather);
	DDX_Control(pDX, IDC_SPIN_NOTICE, c_Notice);
	DDX_Control(pDX, IDC_SPIN_MAX_USER, c_MaxUser);
	DDX_Control(pDX, IDC_SPIN_TRY_TO_CONNECT, c_TryToConnect);
	DDX_Control(pDX, IDC_ALL_SERVER_LIST, c_AllList);
	DDX_Control(pDX, IDC_SELECT_SERVER_LIST, c_SelectList);
	DDX_Check(pDX, IDC_CHECK_DBDEMON, m_CheckDBDemon);
	DDX_Check(pDX, IDC_CHECK_MAP, m_CheckMap);
	DDX_Check(pDX, IDC_CHECK_AGENT, m_CheckAgent);
	DDX_Text(pDX, IDC_TRY_TO_CONNECT, m_TryToConnect);
	DDV_MinMaxUInt(pDX, m_TryToConnect, 0, 30);
	DDX_Text(pDX, IDC_MAX_USER, m_MaxUser);
	DDV_MinMaxUInt(pDX, m_MaxUser, 0, 10000);
	DDX_Check(pDX, IDC_USER_ACCEPT, m_UserAccept);
	DDX_Check(pDX, IDC_CHECK_NOTICE, m_CheckNotice);
	DDX_Text(pDX, IDC_NOTICE_SEC, m_NoticeSec);
	DDV_MinMaxUInt(pDX, m_NoticeSec, 1, 36000);
	DDX_Text(pDX, IDC_NOTICE, m_szNotice);
	DDV_MaxChars(pDX, m_szNotice, 1024);
	DDX_Radio(pDX, IDC_RADIO_WEATHER, m_RadioWeather);
	DDX_Text(pDX, IDC_WEATHER_AMOUNT, m_WeatherAmount);
	DDV_MinMaxUInt(pDX, m_WeatherAmount, 10, 2000);
	DDX_Check(pDX, IDC_STOP_WEATHER, m_CheckStopWeather);
	//}}AFX_DATA_MAP
	
}


BEGIN_MESSAGE_MAP(CServerControl, CDialog)
	//{{AFX_MSG_MAP(CServerControl)
	ON_WM_SHOWWINDOW()
	ON_BN_CLICKED(IDC_RIGHT_ALL, OnRightAll)
	ON_BN_CLICKED(IDC_LEFT, OnLeft)
	ON_BN_CLICKED(IDC_RIGHT, OnRight)
	ON_BN_CLICKED(IDC_LEFT_ALL, OnLeftAll)
	ON_NOTIFY(LVN_COLUMNCLICK, IDC_SELECT_SERVER_LIST, OnColumnclickSelectServerList)
	ON_NOTIFY(LVN_COLUMNCLICK, IDC_ALL_SERVER_LIST, OnColumnclickAllServerList)
	ON_BN_CLICKED(IDC_CHECK_AGENT, OnCheckAgent)
	ON_BN_CLICKED(IDC_CHECK_DBDEMON, OnCheckDbdemon)
	ON_BN_CLICKED(IDC_CHECK_MAP, OnCheckMap)
	ON_BN_CLICKED(IDC_RELOAD_DATA, OnReloadData)
	ON_BN_CLICKED(IDC_PROXY_CONTROL_APPLY, OnProxyControlApply)
	ON_BN_CLICKED(IDC_NOTICE_SEND, OnNoticeSend)
	ON_BN_CLICKED(IDC_CHECK_NOTICE, OnCheckNotice)
	ON_WM_TIMER()
	ON_BN_CLICKED(IDC_WEATHER_APPLY, OnWeatherApply)
	ON_BN_CLICKED(IDC_RADIO_WEATHER2, OnRadioWeather2)
	ON_BN_CLICKED(IDC_RADIO_WEATHER3, OnRadioWeather3)
	ON_BN_CLICKED(IDC_RADIO_WEATHER, OnRadioWeather)
	ON_WM_SIZE()
	//}}AFX_MSG_MAP
	ON_NOTIFY(NM_CUSTOMDRAW, IDC_ALL_SERVER_LIST, OnCustomDrawAll)
	ON_NOTIFY(NM_CUSTOMDRAW, IDC_SELECT_SERVER_LIST, OnCustomDrawSelect)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CServerControl message handlers

void CServerControl::OnShowWindow(BOOL bShow, UINT nStatus) 
{
	CDialog::OnShowWindow(bShow, nStatus);
	
	// TODO: Add your message handler code here
	if(bShow)
	{
		m_CheckAgent = 0;
		m_CheckDBDemon = 0;
		m_CheckMap = 0;
		UpdateData(FALSE);

		RefreshServerList();
		SetForegroundWindow();
		Invalidate();
	}
	else
	{
		//List俊 眉农 等芭 扁撅矫虐磊 ...
		CServerView *pView = (CServerView*)GetParent();
	
		pView->m_TempSelected.RemoveAll();

		char str[ 10 ];	 DWORD dwPort;
		
		int count = c_SelectList.GetItemCount();	
		for(int i=0; i<count; i++)
		{
			c_SelectList.GetItemText(i,1,str,10);
			dwPort = atoi(str);
			pView->m_TempSelected.Add(dwPort);
		}
	}
}

BOOL CServerControl::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	InitializeCriticalSection(&m_criNotice);// 030609 
	// TODO: Add extra initialization here
	m_pApp = (CRMToolApp*)AfxGetApp();

	//府胶飘 冠胶俊 傈眉 急琶苞, CheckBox 笼绢持绰 Option, 吝埃俊 捞固瘤 火涝 Option 悸泼 
	c_AllList.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_SUBITEMIMAGES); 
	c_SelectList.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_SUBITEMIMAGES); 
	
	char *Column[6]  = {"Serve Name", "Port" , "States", "Type", "System","IP"};
	int	 ColumnSize[6] = {100, 50, 40, 80, 70, 100};
	
	LV_COLUMN col;
	
	for(int i=0 ; i<5 ; i++)
	{
		//ListView 牧飘费 檬扁拳..  漠烦汲沥 	
		col.mask = LVCF_TEXT | LVCF_WIDTH | LVCF_SUBITEM | LVCF_FMT;
		col.fmt = LVCFMT_LEFT;
		col.cx = ColumnSize[i];
		col.pszText = Column[i];
		col.cchTextMax = 100;
		col.iSubItem = i;

		c_AllList.InsertColumn(i, &col);
		c_SelectList.InsertColumn(i, &col);
	}

	RefreshServerList();

	c_TryToConnect.SetRange(0,30);
	c_MaxUser.SetRange(0,10000);
	
	//刘啊摹甫 100栏肺 
    UDACCEL accel;
    accel.nInc = 100;
	c_MaxUser.SetAccel(1,&accel);
    
	c_Notice.SetRange(10, 3600);
	accel.nInc = 10;
	c_Notice.SetAccel(1,&accel);
	
	c_Weather.SetRange(10,2000);
	accel.nInc = 100;
	c_Weather.SetAccel(1,&accel);

	m_CheckStopWeather = 0;
	c_WeatherAmount.EnableWindow(FALSE);	//扁夯 厚劝己拳 惑怕肺 
	m_RadioWeather = 0;						//朝揪 讣篮惑怕肺 急琶等惑怕 
	m_WeatherAmount = 500;					//利汲樊 扁夯 500栏肺 
	m_NoticeSec = 60;	
	m_MaxUser = 3000;
	m_TryToConnect = 5;
	m_UserAccept = TRUE;
	m_CheckAgent = 0;
	m_CheckDBDemon = 0;
	m_CheckMap = 0;

	UpdateData(FALSE);


	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CServerControl::CountConnectServer()
{
	CServerView* pView = (CServerView*)GetParent();
	int si = pView->m_nCurServerSet;	//ServerIndex(si)

	int TotalAgent=0, ConAgent=0;
	int TotalDemon=0, ConDemon=0;
	int TotalMap=0, ConMap=0;

	ServerInfo *pInfo = NULL;
	for(int k=0; k< m_pApp->m_ServerSetInfo[ si ].nServerNum ; k++)
	{
		pInfo = &m_pApp->m_ServerInfo[si][k];

		switch(pInfo->ServerType)
		{
		case SERVER_TYPE_AGENT:	
			TotalAgent++;
			if(pInfo->dwStatus == 10)	ConAgent++;		//立加等 惑怕 
			break;

		case SERVER_TYPE_DBDEMON:	
			TotalDemon++;
			if(pInfo->dwStatus == 10)	ConDemon++;		//立加等 惑怕 
			break;

		case SERVER_TYPE_MAP:	
			TotalMap++;
			if(pInfo->dwStatus == 10)	ConMap++;		//立加等 惑怕 
			break;
		}
	}

	char str[ 0xff ];
	sprintf(str,"[Total] Agent : %d/%d , DBDemon %d/%d , Map %d/%d",ConAgent,TotalAgent,ConDemon,TotalDemon,ConMap,TotalMap);
	SetDlgItemText(IDC_STATIC_SUM, str);


	//傈眉 府胶飘 拌魂...
	TotalAgent=0; ConAgent=0;
	TotalDemon=0; ConDemon=0;
	TotalMap=0; ConMap=0;
		
	int count = c_AllList.GetItemCount();
	
	for(int i=0 ; i<count ; i++)
	{
		c_AllList.GetItemText(i, 3, str, 0xff);
		if(!strcmp(str,"AGENT"))
		{
			TotalAgent++;		
			c_AllList.GetItemText(i, 2, str, 0xff);
			if(!strcmp(str,"O"))	ConAgent++;
		}
		else if(!strcmp(str,"DBDEMON"))
		{
			TotalDemon++;
			c_AllList.GetItemText(i, 2, str, 0xff);
			if(!strcmp(str,"O"))	ConDemon++;
															
		}
		else if(!strcmp(str,"MAP")) 
		{
			TotalMap++;
			c_AllList.GetItemText(i, 2, str, 0xff);
			if(!strcmp(str,"O"))	ConMap++;
		}
	}

	sprintf(str,"Agent : %d/%d , DBDemon %d/%d , Map %d/%d",ConAgent,TotalAgent,ConDemon,TotalDemon,ConMap,TotalMap);
	SetDlgItemText(IDC_STATIC_TOTAL, str);


	//急琶等 府胶飘 拌魂...
	TotalAgent=0; ConAgent=0;
	TotalDemon=0; ConDemon=0;
	TotalMap=0; ConMap=0;
		
	count = c_SelectList.GetItemCount();
	
	for(i=0 ; i<count ; i++)
	{
		c_SelectList.GetItemText(i, 3, str, 0xff);
		if(!strcmp(str,"AGENT"))
		{
			TotalAgent++;		
			c_SelectList.GetItemText(i, 2, str, 0xff);
			if(!strcmp(str,"O"))	ConAgent++;
		}
		else if(!strcmp(str,"DBDEMON"))
		{
			TotalDemon++;
			c_SelectList.GetItemText(i, 2, str, 0xff);
			if(!strcmp(str,"O"))	ConDemon++;
															
		}
		else if(!strcmp(str,"MAP")) 
		{
			TotalMap++;
			c_SelectList.GetItemText(i, 2, str, 0xff);
			if(!strcmp(str,"O"))	ConMap++;
		}
	}

	sprintf(str,"Agent : %d/%d , DBDemon %d/%d , Map %d/%d",ConAgent,TotalAgent,ConDemon,TotalDemon,ConMap,TotalMap);
	SetDlgItemText(IDC_STATIC_SELECT, str);

//	InitializeCriticalSection(&m_criNotice);


}
CServerControl::~CServerControl()
{

	DeleteCriticalSection(&m_criNotice); // 030609 
}


void CServerControl::RefreshServerList()
{
	//m_pApp = (CRMToolApp*)AfxGetApp();		//App努贰胶 器牢磐 悸泼 
	CServerView* pView = (CServerView*)GetParent();
	
	LVITEM item;
	char temp[ 0xff ];				
	
	int si = pView->m_nCurServerSet;	//ServerIndex(si)
	if(si < 0)
		return;

	c_AllList.DeleteAllItems();
	c_SelectList.DeleteAllItems();

	ServerInfo *pInfo = NULL;

	CString str;
	BOOL bSelected; bSelected = FALSE;

	int i=0,j=0;
	for(int k=0; k< m_pApp->m_ServerSetInfo[ si ].nServerNum ; k++)
	{
		
		pInfo = &m_pApp->m_ServerInfo[ si ][ k ];

		if(CheckSameServer(pInfo->Port))		//急琶等 辑滚啊 乐栏搁 AllServerList俊辑 猾促. 
		{
			InsertSelectedServer(pInfo, j);
				j++;	continue;
		}
			
		i = k - j;
		
		//辑滚疙 
		item.mask = LVIF_TEXT | LVIF_PARAM;
		item.pszText = pInfo->MapName;
		item.iItem = i;					//青锅龋 
		item.iSubItem = 0;				//凯锅龋 
		item.lParam = pInfo->Port;
		c_AllList.InsertItem(&item);

		
		//Port 锅龋 
		item.mask = LVIF_TEXT;
		item.iSubItem = 1;
		item.pszText = _itoa(pInfo->Port, temp, 10);
		c_AllList.SetItem(&item);

		//泅犁 惑怕 
		sprintf(temp,"%c",m_pApp->m_StatusSymbol[ pInfo->dwStatus ]);
		item.mask = LVIF_TEXT;
		item.iSubItem = 2;
		item.pszText = temp;
		c_AllList.SetItem(&item);

		//辑滚鸥涝 
		item.mask = LVIF_TEXT;
		item.iSubItem = 3;
		switch(pInfo->ServerType)
		{
		case SERVER_TYPE_PROXY:		item.pszText = "PROXY";		break;
		case SERVER_TYPE_AGENT:		item.pszText = "AGENT";		break;
		case SERVER_TYPE_DBDEMON:	item.pszText = "DBDEMON";	break;
		case SERVER_TYPE_MAP:		item.pszText = "MAP";		break;
		}
		c_AllList.SetItem(&item);

		//System
		item.mask = LVIF_TEXT;
		item.iSubItem = 4;
		item.pszText = pInfo->MachineName;
		c_AllList.SetItem(&item);

		//Ip
		item.mask = LVIF_TEXT;
		item.iSubItem = 5;
		item.pszText = pInfo->Ip;
		c_AllList.SetItem(&item);

	/*	if( pInfo->dwStatus == 10 )
			c_AllList.SetItemData(i,RGB(0,0,0));
		else if( pInfo->dwStatus == 0) 
			c_AllList.SetItemData(i,RGB(255,0,0));
		else
			c_AllList.SetItemData(i,RGB(0,0,255));
	*/

	}
	CountConnectServer();		
}



BOOL CServerControl::CheckSameServer(DWORD dwPort)
{
	CServerView* pView = (CServerView*)GetParent();
		
	for(int i=0 ; i <= pView->m_TempSelected.GetUpperBound() ; i++)
	{
		DWORD value = pView->m_TempSelected.GetAt(i);
		
		if(value == dwPort)
		{
			return TRUE;
		}
	}
	return FALSE;
}

void CServerControl::InsertSelectedServer(ServerInfo *pInfo, int i)
{
	LVITEM item;
	char temp[ 0xff ];	

	//辑滚疙 
	item.mask = LVIF_TEXT | LVIF_PARAM;
	item.pszText = pInfo->MapName;
	item.iItem = i;					//青锅龋 
	item.iSubItem = 0;				//凯锅龋 
	item.lParam = pInfo->Port;
	c_SelectList.InsertItem(&item);

	
	//Port 锅龋 
	item.mask = LVIF_TEXT;
	item.iSubItem = 1;
	item.pszText = _itoa(pInfo->Port, temp, 10);
	c_SelectList.SetItem(&item);

	//泅犁 惑怕 
	sprintf(temp,"%c",m_pApp->m_StatusSymbol[ pInfo->dwStatus ]);
	item.mask = LVIF_TEXT;
	item.iSubItem = 2;
	item.pszText = temp;
	c_SelectList.SetItem(&item);

	//辑滚鸥涝 
	item.mask = LVIF_TEXT;
	item.iSubItem = 3;
	switch(pInfo->ServerType)
	{
	case SERVER_TYPE_PROXY:		item.pszText = "PROXY";		break;
	case SERVER_TYPE_AGENT:		item.pszText = "AGENT";		break;
	case SERVER_TYPE_DBDEMON:	item.pszText = "DBDEMON";	break;
	case SERVER_TYPE_MAP:		item.pszText = "MAP";		break;
	}
	c_SelectList.SetItem(&item);

	//System
	item.mask = LVIF_TEXT;
	item.iSubItem = 4;
	item.pszText = pInfo->MachineName;
	c_SelectList.SetItem(&item);

	//Machine
	item.mask = LVIF_TEXT;
	item.iSubItem = 5;
	item.pszText = pInfo->Ip;
	c_SelectList.SetItem(&item);
}

void CServerControl::OnRightAll() 
{
	// TODO: Add your control notification handler code here
	c_AllList.DeleteAllItems();
	c_SelectList.DeleteAllItems();

	//m_pApp = (CRMToolApp*)AfxGetApp();		//App努贰胶 器牢磐 悸泼 
	CServerView* pView = (CServerView*)GetParent();
	
	LVITEM item;
	char temp[ 0xff ];				
	
	int si = pView->m_nCurServerSet;	//ServerIndex(si)
	if(si < 0)		return;

	ServerInfo *pInfo = NULL;
	
	for(int i=0; i< m_pApp->m_ServerSetInfo[ si ].nServerNum ; i++)
	{
		
		pInfo = &m_pApp->m_ServerInfo[si][i];

		//辑滚疙 
		item.mask = LVIF_TEXT | LVIF_PARAM;
		item.pszText = pInfo->MapName;
		item.iItem = i;					//青锅龋 
		item.iSubItem = 0;				//凯锅龋 
		item.lParam = pInfo->Port;
		c_SelectList.InsertItem(&item);

		
		//Port 锅龋 
		item.mask = LVIF_TEXT;
		item.iSubItem = 1;
		item.pszText = _itoa(pInfo->Port, temp, 10);
		c_SelectList.SetItem(&item);

		//泅犁 惑怕 
		sprintf(temp,"%c",m_pApp->m_StatusSymbol[ pInfo->dwStatus ]);
		item.mask = LVIF_TEXT;
		item.iSubItem = 2;
		item.pszText = temp;
		c_SelectList.SetItem(&item);

		//辑滚鸥涝 
		item.mask = LVIF_TEXT;
		item.iSubItem = 3;
		switch(pInfo->ServerType)
		{
		case SERVER_TYPE_PROXY:		item.pszText = "PROXY";		break;
		case SERVER_TYPE_AGENT:		item.pszText = "AGENT";		break;
		case SERVER_TYPE_DBDEMON:	item.pszText = "DBDEMON";	break;
		case SERVER_TYPE_MAP:		item.pszText = "MAP";		break;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -