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

📄 serverstatus.cpp

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

#include "stdafx.h"
#include "MainFrm.h"
#include "rmtool.h"
#include "ServerStatus.h"
#include "ServerView.h"
#include "Packet.h"
//#include <Lmshare.h>
//#include <lmaccess.h>

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

/////////////////////////////////////////////////////////////////////////////
// CServerStatus dialog


CServerStatus::CServerStatus(CWnd* pParent /*=NULL*/)
	: CDialog(CServerStatus::IDD, pParent)
{
	//{{AFX_DATA_INIT(CServerStatus)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
}

void CServerStatus::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CServerStatus)
	DDX_Control(pDX, IDC_LISTENER_LIST, c_ListenerStatusList);
	DDX_Control(pDX, IDC_SERVER_LIST, c_MainStatusList);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CServerStatus, CDialog)
	//{{AFX_MSG_MAP(CServerStatus)
	ON_WM_PAINT()
	ON_NOTIFY(LVN_COLUMNCLICK, IDC_SERVER_LIST, OnColumnclickServerList)
	ON_BN_CLICKED(IDC_REFRESH, OnRefresh)
	ON_WM_SHOWWINDOW()
	ON_WM_SIZE()
	ON_BN_CLICKED(IDC_REFRESH_LISTENER, OnRefreshListener)
	ON_BN_CLICKED(IDC_CONNECT_LISTENER, OnConnectListener)
	ON_BN_CLICKED(IDC_SELECT_PROXY, OnSelectProxy)
	ON_BN_CLICKED(IDC_SELECT_AGENT, OnSelectAgent)
	ON_BN_CLICKED(IDC_SELECT_DBDEMON, OnSelectDbdemon)
	ON_BN_CLICKED(IDC_SELECT_MAP, OnSelectMap)
	ON_BN_CLICKED(IDC_SELECT_ALL, OnSelectAll)
	ON_NOTIFY(LVN_COLUMNCLICK, IDC_LISTENER_LIST, OnColumnclickListenerList)
	ON_BN_CLICKED(IDC_SELECT_X, OnSelectX)
	ON_BN_CLICKED(IDC_SELECT_O, OnSelectO)
	//}}AFX_MSG_MAP
	ON_NOTIFY(NM_CUSTOMDRAW, IDC_SERVER_LIST, OnCustomDraw)
	ON_NOTIFY(NM_CUSTOMDRAW, IDC_LISTENER_LIST, OnCustomDrawListenerList)
	//ON_MESSAGE(UM_FT_SYNC_PACKET, OnReceiveSyncPacket)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CServerStatus message handlers
/*
LONG CServerStatus::OnReceiveSyncPacket(WPARAM WParam, LPARAM lParam)
{
	return TRUE;
}
*/

void CServerStatus::OnPaint() 
{
	CPaintDC dc(this); // device context for painting
	
	// TODO: Add your message handler code here
	//促捞倔肺弊 硅版阑 弧埃祸栏肺 磨秦 徘 牧飘费苞 备盒窍磊~~
//	CRect rect; 
//	GetClientRect(rect); 
//	dc.FillSolidRect(rect, RGB(255,0,255)); 
	// Do not call CDialog::OnPaint() for painting messages
}

BOOL CServerStatus::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	// TODO: Add extra initialization here
	m_pApp = (CRMToolApp*)AfxGetApp();		//App努贰胶 器牢磐 悸泼 
	CServerView* pView; pView = (CServerView*)GetParent();


	//泅犁 急琶等 辑滚悸狼 Index 锅龋甫 啊瘤绊 乐磊..
	//捞吧 咯扁辑 窍绰 捞蜡绰..  View狼 OnInitialUpdate焊促 捞镑捞 歹 刚历 龋免登扁 锭巩捞促.
/*	if(pView->m_nCurServerSet != 0)
	{
		if(m_pApp->m_nNewServersetIndex)
			pView->m_nCurServerSet = m_pApp->m_nNewServersetIndex - 1;
		else
			pView->m_nCurServerSet = m_pApp->m_DefaultServerSetIndex - 1;
		
	}
	else 
		pView->m_nCurServerSet = -1;
*/
	
	
	//府胶飘 冠胶俊 傈眉 急琶苞, CheckBox 笼绢持绰 Option, 吝埃俊 捞固瘤 火涝 Option 悸泼 
	c_MainStatusList.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_CHECKBOXES | LVS_EX_SUBITEMIMAGES); 
	c_ListenerStatusList.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_SUBITEMIMAGES); 

	char *Column[7]  = {"ServerName", "Port", "States", "Connection num", "Server IP","System","Type"};
	int	 ColumnSize[7] = {100, 50, 40, 55, 100, 70, 80};
	
	LV_COLUMN col;
	

	for(int i=0 ; i<7 ; 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_MainStatusList.InsertColumn(i, &col);
	}

	char *Column2[2]  = {"System", "States"};
	int	 ColumnSize2[2] = {80, 40};

	for(i=0 ; i<2 ; i++)
	{
		//ListView 牧飘费 檬扁拳..  漠烦汲沥 	
		col.mask = LVCF_TEXT | LVCF_WIDTH | LVCF_SUBITEM | LVCF_FMT;
		col.fmt = LVCFMT_LEFT;
		col.cx = ColumnSize2[i];
		col.pszText = Column2[i];
		col.cchTextMax = 100;
		col.iSubItem = i;

		c_ListenerStatusList.InsertColumn(i, &col);
	}


/*
	if(GetConnection())
	{
		if(pView->m_bReceivedServerStatus)	//罐疽栏搁..
			RefreshServerStatus();
	}
*/
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

int  g_ServerStatusMainSort[8] = {0,};		//8篮 漠烦 肮荐促.
void CServerStatus::OnColumnclickServerList(NMHDR* pNMHDR, LRESULT* pResult) 
{
	NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
	// TODO: Add your control notification handler code here
	if(g_ServerStatusMainSort[ pNMListView->iSubItem ] == ASC)
		g_ServerStatusMainSort[ pNMListView->iSubItem ] = DESC;
	else
		g_ServerStatusMainSort[ pNMListView->iSubItem ] = ASC;
	
	ListValue value;
	value.iSubItem = pNMListView->iSubItem;
	value.pListCtrl = &c_MainStatusList;
	value.iListCtrl = 1;		//1锅捞 MainServerStatusList..

	ListView_SortItems(c_MainStatusList.m_hWnd, pfnCompare, &value);

	*pResult = 0;
}

extern int  g_SelectServerListSort[5];
extern int  g_AllServerListSort[5];
extern int  g_SelectServerListSort2[5];
extern int  g_AllServerListSort2[5];
extern int  g_ListenerListSort[2];

int CALLBACK pfnCompare(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
{
	static LV_FINDINFO fi;
	static int nItem1,nItem2;
	static char szBuf1[101],szBuf2[101];
	int iList;
	
	ListValue* pValue = (ListValue*)lParamSort;

	HWND hList = pValue->pListCtrl->m_hWnd;
	int iSub = pValue->iSubItem;			//漠烦(SubItem)狼 Index


//	switch(iSub)	//漠烦疙喊(SubItem) 
//	{



//	default:		//巩磊 沥纺 
//		{
		fi.flags = LVFI_PARAM;
		fi.lParam = lParam1;	//Find Parameter蔼阑 罐酒客辑 弊 蔼栏肺 Subitem 闺幅甫 茫酒辑 沥纺窍磊.
		nItem1 = ListView_FindItem( hList, -1,&fi);

		fi.lParam = lParam2;
		nItem2 = ListView_FindItem( hList,-1,&fi);
		ListView_GetItemText( hList, nItem1, iSub, szBuf1,sizeof(szBuf1));
		ListView_GetItemText( hList, nItem2, iSub, szBuf2,sizeof(szBuf2));

		int kk = 0;
		switch(iList = pValue->iListCtrl)
		{
		//MainServerStatus 府胶飘 牧飘费 
		case 1:	
			{
				kk = g_ServerStatusMainSort[ iSub ];	
				
				if(iSub == 3)
				{	//箭磊沥纺 
					if(kk == ASC )
						return( atoi(szBuf1) < atoi(szBuf2) ? -1 : atoi(szBuf1) > atoi(szBuf2) ? 1 : 0);
					else 
						return( atoi(szBuf1) > atoi(szBuf2) ? -1 : atoi(szBuf1) < atoi(szBuf2) ? 1 : 0);
				}
			}
			break;

		case 2:	kk = g_SelectServerListSort[ iSub ];	break;
		case 3:	kk = g_AllServerListSort[ iSub ];		break;
		case 4:	kk = g_SelectServerListSort2[ iSub ];	break;
		case 5:	kk = g_AllServerListSort2[ iSub ];		break;
		case 6: kk = g_ListenerListSort[ iSub ];		break;

		}

		if(kk == ASC)
		{
			return( strcmp( szBuf1,szBuf2) );
		}
		else
		{
			return( strcmp( szBuf1,szBuf2) * -1);
		}
	
//		}
//		break;
//	}

	return 0;
}

void CServerStatus::RefreshServerStatus()
{
	//return;
	c_MainStatusList.DeleteAllItems();
	//::SendMessage(c_MainStatusList.m_hWnd, LVM_DELETEALLITEMS, 0, 0L);
	
	//m_pApp = (CRMToolApp*)AfxGetApp();		//App努贰胶 器牢磐 悸泼 
	CServerView* pView = (CServerView*)GetParent();
	
	
	LVITEM item;
	char temp[ 0xff ];				
	//pView->m_nCurServerSet = 0;			//泅犁 急琶等 辑滚甫 烙矫肺 惑侩栏肺 悸泼窍磊.
	int si = pView->m_nCurServerSet;	//ServerIndex(si)
	if(si < 0)
		return;

	ServerInfo *pInfo = NULL;

	CString str;
	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_MainStatusList.InsertItem(&item);

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

		//泅犁 惑怕 
		sprintf(temp,"%c",m_pApp->m_StatusSymbol[ pInfo->dwStatus ]);
		item.mask = LVIF_TEXT;
		item.iSubItem = 2;
		item.pszText = temp;
		c_MainStatusList.SetItem(&item);
/*		if( pInfo->dwStatus == 10 )
			c_MainStatusList.SetItemData(i,RGB(0,0,0));
		else if( pInfo->dwStatus == 0) 
			c_MainStatusList.SetItemData(i,RGB(255,0,0));
		else
			c_MainStatusList.SetItemData(i,RGB(0,0,255));
*/
		//立加蜡历荐 
		sprintf(temp,"%d",pInfo->dwNumOfUser);
		item.mask = LVIF_TEXT;
		item.iSubItem = 3;
		item.pszText = temp;
		c_MainStatusList.SetItem(&item);

		//ServerIP
		item.mask = LVIF_TEXT;
		item.iSubItem = 4;
		item.pszText = pInfo->Ip;
		c_MainStatusList.SetItem(&item);

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

		//辑滚鸥涝 
		item.mask = LVIF_TEXT;
		item.iSubItem = 6;
		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_MainStatusList.SetItem(&item);

		if(CheckSameServer(pInfo->Port))		//急琶等 辑滚啊 乐栏搁 AllServerList俊辑 猾促. 
		{
			c_MainStatusList.SetCheck(i);
		}
	}
}

void CServerStatus::OnRefresh() 
{

	// TODO: Add your control notification handler code here
/*	
	//傍蜡 弃歹 父甸扁 
	SHARE_INFO_2 si2;
	::ZeroMemory(&si2, sizeof(SHARE_INFO_2));

	si2.shi2_netname = (char *)(L"Dlls");
	si2.shi2_type = STYPE_DISKTREE;
	si2.shi2_remark = NULL;
	si2.shi2_permissions = ACCESS_ALL;
	si2.shi2_max_uses = SHI_USES_UNLIMITED;
	si2.shi2_current_uses = 0;
	si2.shi2_path = (char *)(L"D:\\Dlls");
	si2.shi2_passwd = NULL;


	NET_API_STATUS netStat = NetShareAdd(0, 2, (LPBYTE)(&si2),NULL);

	if(netStat != 0)
	{
	  char str[0xff];
	  sprintf(str,"Error: %u", netStat);
	  MessageBox(str);
	}
*/
	if( !RIGHT(MASK_6) )	return;
	c_MainStatusList.DeleteAllItems();
//	c_ListenerStatusList.DeleteAllItems();
	RequestCurrentServersetInfo();

	//<! BBD 040105		怕惫,富饭捞 辑滚惑怕 瘤盔侩
	((CMainFrame *)m_pApp->m_pMainWnd)->RefreshRMServerStatus();
	//> BBD 040105		怕惫,富饭捞 辑滚惑怕 瘤盔侩

}

void CServerStatus::RequestCurrentServersetInfo()
{
	CServerView* pView = (CServerView*)GetParent();
	CChildFrame *pFrame = (CChildFrame*)pView->GetParent();		//览翠 皋技瘤 罐阑 橇饭烙狼 林家蔼 

	PACKET_REQUEST_ALL_SUBSERVER_INFO packet(FALSE, pFrame->m_nFrameID);
	g_pNet->Send(m_pApp->m_nCI[ pView->m_nCurServerSet ], (char*)&packet, packet.GetPacketSize());

	PACKET_REQUEST_ALL_LISTENER_INFO packet3(pFrame->m_nFrameID);
	g_pNet->Send(m_pApp->m_nCI[ pView->m_nCurServerSet ], (char*)&packet3, packet3.GetPacketSize());

}

/*
void CServerStatus::OnMoveToControl() 
{
	// TODO: Add your control notification handler code here

	CServerView *pView = (CServerView*)GetParent();
	pView->ChangeView(1);		//辑滚 Control;
	pView->m_nCurView = 1;	
}
*/

void CServerStatus::OnShowWindow(BOOL bShow, UINT nStatus) 
{
	CDialog::OnShowWindow(bShow, nStatus);
	
	// TODO: Add your message handler code here
	if(bShow)
	{
		CServerView* pView; pView = (CServerView*)GetParent();
		//pView->m_TempSelected.RemoveAll();	//急琶等芭 历厘家 瘤快绊..
		SetForegroundWindow();
		RefreshServerStatus();
		Invalidate();
	}
	else
	{
		//List俊 眉农 等芭 扁撅矫虐磊 ...
		CServerView *pView = (CServerView*)GetParent();
	
		pView->m_TempSelected.RemoveAll();

		char str[ 10 ];	 DWORD dwPort;
		
		int count = c_MainStatusList.GetItemCount();	
		for(int i=0; i<count; i++)
		{
			if(c_MainStatusList.GetCheck(i))	//Check Box 急琶登菌栏搁 
			{
				c_MainStatusList.GetItemText(i,1,str,10);
				dwPort = atoi(str);
				pView->m_TempSelected.Add(dwPort);
			}
		}

	}
	
}

void CServerStatus::OnCustomDraw(NMHDR* pNMHDR, LRESULT* pResult)
{
	NMTVCUSTOMDRAW * pcd = (NMTVCUSTOMDRAW*) pNMHDR;

	switch(pcd->nmcd.dwDrawStage) 
	{
    case  CDDS_PREPAINT:
        *pResult = CDRF_NOTIFYITEMDRAW;
        break;
    case CDDS_ITEMPREPAINT:
		{
			char str[16];	
			c_MainStatusList.GetItemText(pcd->nmcd.dwItemSpec,2,str,16);

			if(!strcmp(str,"O"))
			{
				pcd->clrText = (COLORREF)RGB(0,0,0);
			}
			else if(!strcmp(str,"X"))
			{
				pcd->clrText = (COLORREF)RGB(255,0,0);
				pcd->clrTextBk = (COLORREF)RGB(255,255,0);
			}
			else
			{
				pcd->clrText = (COLORREF)RGB(0,0,255);
			}

			*pResult = CDRF_DODEFAULT;
		}
		break;
/*		
		COLORREF rgb = (COLORREF)c_MainStatusList.GetItemData(pcd->nmcd.dwItemSpec);

		if(rgb == RGB(255,0,0))
		{
			pcd->clrText = (COLORREF)rgb;
			pcd->clrTextBk = (COLORREF)RGB(255,255,0);
		}
		else if(rgb == RGB(0,0,255))
		{
			pcd->clrText = (COLORREF)rgb;
		}
		
        *pResult = CDRF_DODEFAULT;
		break;
		*/
        
    }

}


void CServerStatus::OnCustomDrawListenerList(NMHDR* pNMHDR, LRESULT* pResult)
{
	NMTVCUSTOMDRAW * pcd = (NMTVCUSTOMDRAW*) pNMHDR;

	switch(pcd->nmcd.dwDrawStage) 
	{
    case  CDDS_PREPAINT:
        *pResult = CDRF_NOTIFYITEMDRAW;
        break;
    case CDDS_ITEMPREPAINT:
		{
			char str[16];	
			c_ListenerStatusList.GetItemText(pcd->nmcd.dwItemSpec,1,str,16);

			if(!strcmp(str,"O"))
			{
				pcd->clrText = (COLORREF)RGB(0,0,0);
			}
			else if(!strcmp(str,"X"))
			{
				pcd->clrText = (COLORREF)RGB(255,0,0);
				pcd->clrTextBk = (COLORREF)RGB(255,255,0);

⌨️ 快捷键说明

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