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

📄 serverpatch.cpp

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

#include "stdafx.h"
#include "MainFrm.h"
#include "rmtool.h"
#include "ServerPatch.h"
#include "ServerView.h"
#include "Packet.h"
#include "RMToolDoc.h"
#include "SetDownloadPathDlg.h"
#include "ServerFilePathDlg.h"
#include "KickOffDlg.h" 		// BBD 040107


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

//extern int DRAGON_DB;
/////////////////////////////////////////////////////////////////////////////
// CServerPatch dialog


CServerPatch::CServerPatch(CWnd* pParent /*=NULL*/)
	: CDialog(CServerPatch::IDD, pParent)
{
	//{{AFX_DATA_INIT(CServerPatch)
	m_nRadioExecute = -1;
	m_nRadioShutDown = -1;
	m_CheckMap = FALSE;
	m_CheckAgent = FALSE;
	m_CheckDBDemon = FALSE;
	m_szExeName = _T("");
	m_nRadioIni = -1;
	m_CheckExecute = FALSE;
	//}}AFX_DATA_INIT
	m_nSelectedCount = 0;
	ResetSelectedBuffer();
	m_pKickDlg = 0L;	// BBD 040107
	m_pView = 0L;	// BBD	040107
}


CServerPatch::~CServerPatch()
{
	//<! BBD 040107
	if(m_pKickDlg)
	{
		delete m_pKickDlg;
		m_pKickDlg = 0L;
	}
	m_pView = 0L;
	//> BBD 040107
}

void CServerPatch::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CServerPatch)
	DDX_Control(pDX, IDC_CHECK_EXECUTE, c_CheckExecute);
	DDX_Control(pDX, IDC_SELECT_SERVER_LIST, c_SelectList);
	DDX_Control(pDX, IDC_ALL_SERVER_LIST, c_AllList);
	DDX_Radio(pDX, IDC_RADIO_EXECUTE, m_nRadioExecute);
	DDX_Radio(pDX, IDC_RADIO_SHUTDOWN, m_nRadioShutDown);
	DDX_Check(pDX, IDC_CHECK_MAP, m_CheckMap);
	DDX_Check(pDX, IDC_CHECK_AGENT, m_CheckAgent);
	DDX_Check(pDX, IDC_CHECK_DBDEMON, m_CheckDBDemon);
	DDX_Text(pDX, IDC_EXENAME, m_szExeName);
	DDV_MaxChars(pDX, m_szExeName, 256);
	DDX_Radio(pDX, IDC_RADIO_INI, m_nRadioIni);
	DDX_Check(pDX, IDC_CHECK_EXECUTE, m_CheckExecute);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CServerPatch, CDialog)
	//{{AFX_MSG_MAP(CServerPatch)
	ON_WM_SHOWWINDOW()
	ON_BN_CLICKED(IDC_RIGHT_ALL, OnRightAll)
	ON_BN_CLICKED(IDC_RIGHT, OnRight)
	ON_BN_CLICKED(IDC_LEFT, OnLeft)
	ON_BN_CLICKED(IDC_LEFT_ALL, OnLeftAll)
	ON_BN_CLICKED(IDC_SHUT_DOWN, OnShutDown)
	ON_BN_CLICKED(IDC_SERVER_EXECUTE, OnServerExecute)
	ON_BN_CLICKED(IDC_MAKE_INI, OnMakeIni)
	ON_BN_CLICKED(IDC_DOWNLOAD_PATH, OnDownloadPath)
	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_RADIO_SHUTDOWN, OnRadioShutdown)
	ON_BN_CLICKED(IDC_RADIO2, OnRadio2)
	ON_BN_CLICKED(IDC_RADIO3, OnRadio3)
	ON_BN_CLICKED(IDC_RADIO4, OnRadio4)
	ON_BN_CLICKED(IDC_RADIO5, OnRadio5)
	ON_BN_CLICKED(IDC_RADIO_EXECUTE, OnRadioExecute)
	ON_BN_CLICKED(IDC_RADIO7, OnRadio7)
	ON_BN_CLICKED(IDC_RADIO8, OnRadio8)
	ON_BN_CLICKED(IDC_RADIO9, OnRadio9)
	ON_BN_CLICKED(IDC_RADIO10, OnRadio10)
	ON_BN_CLICKED(IDC_REBOOT, OnReboot)
	ON_NOTIFY(LVN_COLUMNCLICK, IDC_ALL_SERVER_LIST, OnColumnclickAllServerList)
	ON_NOTIFY(LVN_COLUMNCLICK, IDC_SELECT_SERVER_LIST, OnColumnclickSelectServerList)
	ON_BN_CLICKED(IDC_SET_SERVERFILE, OnSetServerfile)
	ON_BN_CLICKED(IDC_LISTENER_PATCH, OnListenerPatch)
	ON_BN_CLICKED(IDC_RADIO_INI, OnRadioIni)
	ON_BN_CLICKED(IDC_RADIO_NORMAL, OnRadioNormal)
	ON_WM_SIZE()
	ON_BN_CLICKED(IDC_KICKDLG_BTN, OnKickdlgBtn)
	//}}AFX_MSG_MAP
	ON_NOTIFY(NM_CUSTOMDRAW, IDC_ALL_SERVER_LIST, OnCustomDrawAll)
	ON_NOTIFY(NM_CUSTOMDRAW, IDC_SELECT_SERVER_LIST, OnCustomDrawSelect)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CServerPatch message handlers

BOOL CServerPatch::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	// TODO: Add extra initialization here
	m_pApp = (CRMToolApp*)AfxGetApp();
	//<!	BBD 040107
	//CServerView *pView; pView = (CServerView*)GetParent();
	m_pView = (CServerView*)GetParent();
	//>	BBD 040107

	char path[ MAX_PATH ];
	__PATH
//	sprintf(path,"%s\\Setup.ini",m_pApp->GetInstalledPath());

	//弥辟 荤侩茄 辑滚 颇老 疙窜阑 ini 颇老俊辑 佬绢靛覆 
	char str[ MAX_PATH ];
	char key[ 0xff ];	memset(key,0,0xff);
	char app[ 0xff ];	memset(app,0,0xff);

	for(int j=0; j< 3 ;j++) //RECENTFILE_NUM肮荐
	{
		//sprintf(app,"RecentFile%d",pView->m_nCurServerSet + 1);
		sprintf(app,"RecentFile%d", j + 1);
				
		for(int i=0; i<4 ; i++)
		{
			sprintf(key,"File%d", i+1);
			GetPrivateProfileString(app,key,"",str,MAX_PATH,path);
			m_pApp->m_szServerFile[j][i] = str;
		}

	}
	
//	m_pApp->m_szServerFile[0] = "D:\\SourceFile\\ProxyServer_b011213.exe";
//	m_pApp->m_szServerFile[1] = "D:\\SourceFile\\AgentServer_b011213.exe";
//	m_pApp->m_szServerFile[2] = "D:\\SourceFile\\DBDemon_b011215.exe";
//	m_pApp->m_szServerFile[3] = "D:\\SourceFile\\MapServer_b011216.exe";


	//府胶飘 冠胶俊 傈眉 急琶苞, CheckBox 笼绢持绰 Option, 吝埃俊 捞固瘤 火涝 Option 悸泼 

	c_AllList.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_SUBITEMIMAGES); 
	c_SelectList.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_SUBITEMIMAGES); 

	char *Column[6]  = {"Server Name", "Port" , "States", "Type", "System", "IP"};	/*漠烦*/
	int	 ColumnSize[6] = {100, 50, 40, 80, 70, 100};
	
	LV_COLUMN col;
	
	for(int i=0 ; i<6 ; 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();

	
	//Check Box 檬扁拳 
	m_CheckAgent = 0;
	m_CheckDBDemon = 0;
	m_CheckMap = 0;
	m_CheckExecute = 1;

	//扼叼坷 滚瓢 檬扁拳 
	m_nRadioIni = 1;		//扁夯 角青颇老肺 
	m_nRadioShutDown = 4;	//Map
	m_nRadioExecute = 4;	//Proxy
	UpdateData(FALSE);

	//<! BBD 040107 KickOff Dialog 
	m_pKickDlg = new CKickOffDlg;
	m_pKickDlg->Create(IDD_KICKOFF_USER_DLG, this);
	m_pKickDlg->SetView(m_pView);
	//>  BBD 040107 KickOff Dialog 

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

void CServerPatch::OnShowWindow(BOOL bShow, UINT nStatus) 
{
	CDialog::OnShowWindow(bShow, nStatus);
	
	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);
		}
	}	
}


void CServerPatch::RefreshServerList()
{
	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);



	}
	CountConnectServer();		
}

void CServerPatch::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);
}

BOOL CServerPatch::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 CServerPatch::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 CServerPatch::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;

⌨️ 快捷键说明

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