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

📄 mainfrm.cpp

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

	case MSG_RM_REPLY_ALL_LISTENER_INFO:
		{
			int offset = 8;

			BYTE bServerSet;		
			memcpy(&bServerSet, pMsg+1, sizeof(BYTE));	

			
			_ASSERTE( bServerSet > 0);
			nServerSetArrayIndex = GetServerSetNumByServerSetIndex( bServerSet );
			_ASSERTE( nServerSetArrayIndex >= 0);
			if( nServerSetArrayIndex < 0 ) goto Error_ServerSetIndex;

			//if(bServerSet == 100)	//俺惯磊 抛胶飘 辑滚牢版快 
			//	bServerSet = 2;		
			//else
			//	bServerSet -= 1;	

			DWORD dwFrameID;		//皋技瘤 罐阑 FrameID
			memcpy(&dwFrameID, pMsg+2, sizeof(DWORD));

			WORD wServerNum;		//罐篮 醚 Listener 肮荐 
			memcpy(&wServerNum, pMsg+6, sizeof(WORD));

			m_pApp->m_ServerSetInfo[ nServerSetArrayIndex ].nListenerNum = wServerNum;

			for(int k=0; k<wServerNum ; k++)
			{
				m_pApp->m_ListenerInfo[ nServerSetArrayIndex ][ k ].bStatus = pMsg[ offset ]; 
				offset += 1;
				unsigned long uIp;
				in_addr addr;
				memset(m_pApp->m_ListenerInfo[ nServerSetArrayIndex ][ k ].Ip,0,16);

				memcpy(&uIp, pMsg + offset, 4);
				addr.S_un.S_addr = uIp;

				memcpy(m_pApp->m_ListenerInfo[ nServerSetArrayIndex ][ k ].Ip, inet_ntoa(addr), strlen(inet_ntoa(addr)));
				offset += 4;

				for(int i=0; i<m_pApp->m_ServerSetInfo[ nServerSetArrayIndex ].nServerNum ; i++)
				{
					if(!strcmp(m_pApp->m_ServerInfo[ nServerSetArrayIndex ][ i ].Ip, m_pApp->m_ListenerInfo[ nServerSetArrayIndex ][ k ].Ip) )
					{
						memset(m_pApp->m_ListenerInfo[ nServerSetArrayIndex ][ k ].MachineName, 0, sizeof(m_pApp->m_ListenerInfo[ nServerSetArrayIndex ][ k ].MachineName));
						strcpy(m_pApp->m_ListenerInfo[ nServerSetArrayIndex ][ k ].MachineName, m_pApp->m_ServerInfo[ nServerSetArrayIndex ][ i ].MachineName);
						break;
					}
				}
			}

			if(dwFrameID == 0)	//肺弊牢饶 霉 夸没...
			{
				CServerView* pView = GetFirstServerView();
				pView->m_ServerStatusDlg.RefreshListenerStatus();
			}
			else
			{
				CChildFrame *pFrame = (CChildFrame*)FindFrameAndActivate(dwFrameID);

				if(pFrame)
				{
					CServerView* pView = (CServerView*)pFrame->GetActiveView();
					if(pView)
					{
						pView->m_ServerStatusDlg.RefreshListenerStatus();
					}
				}
			}

		}
		break;
	
		//Server Down!!!
	case MSG_RM_DOWN_SERVER:
		{
			return; // 021112 agent啊 捞蜡绝捞 磊备 捞 菩哦阑 焊郴扁 锭巩俊 官肺 府畔栏肺 官层蝶.
			//AfxMessageBox( "Don't Run This Function~~!!" );
			//return;  //kyo 20826

			PACKET_DOWN_SERVER *packet = (PACKET_DOWN_SERVER*)pMsg;

			m_TrayIcon.SetIcon(IDI_SERVERDOWN);
			SetTimer(1,500,NULL);
			m_nEmergency = 1;	//1锅捞 IDI_SERVERDOWN栏肺 窍磊 

			AlarmStop();
			AlarmStart();
						
			ShowWindow(SW_RESTORE);		//Hide惑怕搁 Show肺 父甸绊 
			
			//int nServerSet;
			
			_ASSERTE( packet->bServerSetNum > 0);
			nServerSetArrayIndex = GetServerSetNumByServerSetIndex( packet->bServerSetNum );
			_ASSERTE( nServerSetArrayIndex >= 0);
			if( nServerSetArrayIndex < 0 ) goto Error_ServerSetIndex;


			//if(packet->bServerSetNum == 100)
			//nServerSet = 2;
			//else
			//	nServerSet = packet->bServerSetNum - 1;

			for(int i=0; i<m_pApp->m_ServerSetInfo[ nServerSetArrayIndex ].nServerNum ; i++)
			{
				if(m_pApp->m_ServerInfo[ nServerSetArrayIndex ][ i ].Port == packet->wPort )
				{
					//App努贰胶狼 Server沥焊甸俊 惑怕客, 立加荐 罐篮巴阑 眠啊茄促. 
					m_pApp->m_ServerInfo[ nServerSetArrayIndex ][ i ].dwStatus = 0;
					m_pApp->m_ServerInfo[ nServerSetArrayIndex ][ i ].dwNumOfUser = 0; 
					break;
				}
			}
			
			CServerView *pView = FindCurrentActivateServerViewBySpecifiedServerSet(nServerSetArrayIndex);

			if(pView)
			{
				CChildFrame *pChild = (CChildFrame*)pView->GetParent();
				if(pChild)	pChild->ShowWindow(SW_RESTORE);
				
				//盎脚 
				pView->m_ServerStatusDlg.RefreshSomeItem(packet->wPort, FALSE);
				pView->m_ServerControlDlg.RefreshSomeItem(packet->wPort, FALSE);
				pView->m_ServerPatchDlg.RefreshSomeItem(packet->wPort, FALSE);
			}
			
			CString str;
			str.Format("ServerDown In %s' ServerSet!!(Port: %d)",m_pApp->m_ServerSetInfo[ nServerSetArrayIndex ].szSetName
				, packet->wPort );
			MessageBox(str);
		}
		break;

	case MSG_RM_LISTENER_CONNECT_COMPLETE:
		{
			PACKET_LISTENER_CONNECT_COMPLETE *packet = (PACKET_LISTENER_CONNECT_COMPLETE*)pMsg;

			Sleep(1000);	//泪瘪 Wait....
			
			CChildFrame *pFrame = (CChildFrame*)FindFrameAndActivate(packet->dwFrameID);

			if(pFrame)
			{
				CServerView* pView = (CServerView*)pFrame->GetActiveView();
				if(pView)
				{
					pView->m_ServerStatusDlg.c_ListenerStatusList.DeleteAllItems();
				}
			}
			
			PACKET_REQUEST_ALL_LISTENER_INFO packet3(packet->dwFrameID);
			g_pNet->Send(dwConnectionIndex, (char*)&packet3, packet3.GetPacketSize());			

		}
		break;

	case MSG_RM_CHECK_LISTENER_CONNECTION_RESULT:
		{
			PACKET_CHECK_LISTENER_CONNECTION_RESULT *packet = (PACKET_CHECK_LISTENER_CONNECTION_RESULT*)pMsg;

			if(!packet->dwCount)
				MessageBox("Check Success! No Problem!");
			else
			{
				char str[ 0xff ];
				sprintf(str,"Invalid Index occured! count: %d",packet->dwCount);
				MessageBox(str);
			}
		}
		break;

	case MSG_RM_SERVER_DISCONNECTED:
		{
			
			if( 10 == ::GetPrivateProfileInt("Nation","yk",0,"./setup.ini") )	return; //款康评狼 何殴栏肺 促款矫 扑诀救登霸.

			PACKET_RM_SERVER_DISCONNECT *packet = (PACKET_RM_SERVER_DISCONNECT*)pMsg;
			
			_ASSERTE( packet->bServerSetNum > 0);
			nServerSetArrayIndex = GetServerSetNumByServerSetIndex( packet->bServerSetNum );
			_ASSERTE( nServerSetArrayIndex >= 0);
			if( nServerSetArrayIndex < 0 ) goto Error_ServerSetIndex;

			
			//if(packet->bServerSetNum == 100)
			//	nServerSetArrayIndex = 2;		//海鸥辑滚(抛胶飘 辑滚)
			//else
			//	nServerSetArrayIndex = packet->bServerSetNum - 1;


			int index = m_pApp->FindIndexByPort(nServerSetArrayIndex, packet->wPort);
			m_pApp->m_ServerInfo[ nServerSetArrayIndex ][ index ].dwStatus =  0;	//立加 谗绢柳 惑怕肺 盎脚 

			CServerView* pView = FindCurrentActivateServerViewBySpecifiedServerSet( nServerSetArrayIndex, FALSE );

			//泅犁 立加捞 谗绢柳 秦寸 辑滚悸栏肺 嘎苗柳 View啊 乐促搁 
			if(pView)
			{
			//	pView->ChangeView(0);		//ServerStatus Tab栏肺 嘎眠绊 
			//	pView->m_ServerStatusDlg.RefreshServerStatus();
				if(pView->m_nCurView == 1)
					pView->m_ServerControlDlg.RefreshSomeItem(packet->wPort, FALSE);
				else if(pView->m_nCurView == 0)
					pView->m_ServerStatusDlg.RefreshSomeItem(packet->wPort, FALSE);
				else if(pView->m_nCurView == 2)
					pView->m_ServerPatchDlg.RefreshSomeItem(packet->wPort, FALSE);
			}
			else
			{
				MakeNewServerTemplate(nServerSetArrayIndex + 1);
			}
		}	
		break;

	//货肺款 辑滚啊 立加沁阑锭 
	case MSG_RM_SERVER_UP:
		{
			PACKET_RM_SERVER_UP *packet = (PACKET_RM_SERVER_UP*)pMsg;

			_ASSERTE( packet->bServerSetNum > 0);
			nServerSetArrayIndex = GetServerSetNumByServerSetIndex( packet->bServerSetNum );
			_ASSERTE( nServerSetArrayIndex >= 0);
			if( nServerSetArrayIndex < 0 ) goto Error_ServerSetIndex;

			
			//if(packet->bServerSetNum == 100)
			//	nServerSetArrayIndex = 2;		//海鸥辑滚(抛胶飘 辑滚)
			//else
			//	nServerSetArrayIndex = packet->bServerSetNum - 1;
			

			int index = m_pApp->FindIndexByPort(nServerSetArrayIndex, packet->wPort);
			m_pApp->m_ServerInfo[ nServerSetArrayIndex ][ index ].dwStatus =  10;	//立加 谗绢柳 惑怕肺 盎脚 

			
			CServerView* pView = FindCurrentActivateServerViewBySpecifiedServerSet( nServerSetArrayIndex, FALSE );

			//泅犁 立加捞 谗绢柳 秦寸 辑滚悸栏肺 嘎苗柳 View啊 乐促搁 
			if(pView)
			{
				if(pView->m_nCurView == 1)
					pView->m_ServerControlDlg.RefreshSomeItem(packet->wPort, TRUE);
				else if(pView->m_nCurView == 0)
					pView->m_ServerStatusDlg.RefreshSomeItem(packet->wPort, TRUE);
				else if(pView->m_nCurView == 2)
					pView->m_ServerPatchDlg.RefreshSomeItem(packet->wPort, TRUE);
			}
		}
		break;
	}

	return;
Error_ServerSetIndex:
	MessageBox("Invalid ServerSetArrayIndex..","Error");
	return;
			
}

void CMainFrame::OnAccept(WPARAM wParam, LPARAM lParam)
{
	wParam;lParam;
	int k; k=0;
}

void CMainFrame::OnDisconnect(WPARAM wParam, LPARAM lParam)
{
	lParam;

	for(int i=0; i<MAX_SERVERSET_NUM ; i++)
	{
		if(m_pApp->m_nCI[ i ] == wParam)
		{
			char str[0xff];
			sprintf(str,"Connection lost for proxyserver(index:%d)",i);	//0捞搁 惑侩, 1捞搁 2焙,..
			m_pApp->m_nCI[ i ] = 0;
			MessageBox(str,"Connection Lost");

			CServerView *pView = FindServerView(i);
			if( pView == NULL )
			{
				SetDlgItemText( IDC_CONNECT_INFO, "Disconnected" );
				return;
			}

			pView->m_szConnectInfo = "Disconnected";
			//pView NULL
			pView->UpdateData(FALSE);
			pView->c_ProxyConnect.EnableWindow(TRUE);

			if( i == 0) //惑侩阑 0捞扼绊 敌促. 
			{//惑侩老锭父 皋瘤矫甫 焊辰促.
				if( pView->m_bIsUMS == true) // 030604 kyo
				{
					pView->SendUMS_ProxyServerDown();
				}
			}

			break;
		}
	}

}

void CMainFrame::OnSocketEvent(WPARAM wParam, LPARAM lParam)
{
	wParam;lParam;

	g_pNet->SocketEventProc();
}

//kyo
LONG CMainFrame::OnReceiveSyncPacket(WPARAM wParam, LPARAM lParam)
{
	_ASSERTE( FALSE == IsBadReadPtr(&wParam, (UINT)lParam) && "CMainFrame : OnReceiveSyncPacket" );

	char* pMsg = (char*)wParam;
	DWORD dwLen; dwLen = (DWORD)lParam;
	
	//Get Header and pt
	BYTE header, set_num;
	
	memcpy( (void*)&set_num, pMsg, 1 );
	memcpy( (void*)&header, (pMsg+1), 1 );

	int setnum; setnum = (int)set_num;

	ASSERT( header != NULL );

	switch( header )
	{

	case MSG_RM_REQUEST_RMINFO:
		{			
			/*kyo 020703----------------------------------------------------
				啊沥 :	甸绢坷绰 ServerInfo蔼篮 鉴辑措肺 甸绢柯促. ( TCP捞聪瘪 )
						弊矾聪瘪 set_num篮 硅凯鉴辑肺 0牢巴捞 根顶 促 甸绢柯第 1,2.. 鉴栏肺 刘啊等促. 
				裙牢 :	set_num篮 5俺甫 逞阑荐 绝促. (0 ~ 4)
			-------------------------------------------------------------*/
			PACKET_RMSERVER_INFO *packet = (PACKET_RMSERVER_INFO*)pMsg;
			
			//罐篮 蔼阑 秦寸 CRMToolApp->m_serverinfo俊 历厘茄促. 
			SetRMServerInfo( &packet->pServerInfo , (int)set_num );
			
			//茄锅 府敲饭浆 茄促. 
			//CServerView *pView = GetServerView();
			//pView->m_ServerStatusDlg.RefreshServerStatus();

		}break;
	case MSG_CLOSE_CONNECTION:
		{
			//PACKET_CLOSE_RMSERVER *packet = (PACKET_CLOSE_RMSERVER*)pMsg;
			//if( !g_pFt->CloseClientSocket() )
			g_pFt->CloseClientSocket(); //ADD err


		}break;
	default:
		break;
	}
	return TRUE;
}


CMDIChildWnd* CMainFrame::FindFrameAndActivate(int nFrameID)
{
	CMultiDocTemplate *pTemplate;
	CDocument *pDoc;
	CView *pView;
	CMDIChildWnd *pFrame;
	POSITION p,vp;
	CString title,id,view;

	POSITION pos = m_pApp->GetFirstDocTemplatePosition();

	while(TRUE)
	{
		pTemplate = (CMultiDocTemplate*)m_pApp->GetNextDocTemplate(pos);
		if(!pos)	return NULL;

		p = pTemplate->GetFirstDocPosition();
		if(p == 0)	
		{
			return NULL;
		}

		while(TRUE)
		{

			pDoc = pTemplate->GetNextDoc(p);
			
			vp = pDoc->GetFirstViewPosition();
			pView = pDoc->GetNextView(vp);

			pFrame = (CMDIChildWnd*)pView->GetParentFrame();
			pFrame->GetWindowText(title);
			
			view = title.Mid(1,1);
			if(!view.Compare("S"))		//ServerView捞搁 
			{
				id = title.Mid(2,2);
				if( nFrameID == atoi( id.GetBuffer( id.GetLength() ) ) )
				{
					pFrame->ActivateFrame();
					return pFrame;
				}
			}

			if(p == 0)	break;		//捞霸 付瘤阜 档钮刚飘烙..
		}
	}

	return NULL;
}

//泅犁 瘤沥等 辑滚悸栋乐绰 Server Frame捞 栋乐绰瘤 八荤秦辑 栋乐栏搁 Frame 器牢磐 府畔 ..  窃荐疙 例扼 辨寸..ぱ_-;;
CServerView* CMainFrame::FindCurrentActivateServerViewBySpecifiedServerSet(int nServerSetIndex, BOOL bActivate)
{
	CMultiDocTemplate *pTemplate;
	CDocument *pDoc;
	CView *pView;
	CMDIChildWnd *pFrame;
	POSITION p,vp;
	CString title,id,view;

	POSITION pos = m_pApp->GetFirstDocTemplatePosition();

	while(TRUE)
	{
		pTemplate = (CMultiDocTemplate*)m_pApp->GetNextDocTemplate(pos);
		if(!pos)	return NULL;

		p = pTemplate->GetFirstDocPosition();
		if(p == 0)	
		{
			return NULL;
		}

		while(TRUE)
		{
			pDoc = pTemplate->GetNextDoc(p);
			
			vp = pDoc->GetFirstViewPosition();
			pView = pDoc->GetNextView(vp);

			pFrame = (CMDIChildWnd*)pView->GetParentFrame();
			pFrame->GetWindowText(title);
			
			view = title.Mid(1,1);
			if(!view.Compare("S"))		//ServerView捞搁 
			{
				id = title.Mid(2,2);

				//泅犁 概俺函荐肺 林绢柳 ServerSet肺 嘎眠绢廉 乐绰 View啊 乐促搁 蔼阑 府畔 
				if(((CServerView*)pView)->m_nCurServerSet == nServerSetIndex)
				{
					if(bActivate)
						pFrame->ActivateFrame();		//秦寸 View肺 劝己拳 矫虐绊.. 
					
					return (CServerView*)pView;
				}
			}
			if(p == 0)	break;		//捞霸 付瘤阜 档钮刚飘烙..
		}
	}

	return NULL;
}


CServerView* CMainFrame::GetFirstServerView()
{
	CMultiDocTemplate *pTemplate;
	CDocument *pDoc;
	CView *pView;
	CMDIChildWnd *pFrame;
	POSITION vp;
	CString title,view;

	POSITION pos = m_pApp->GetFirstDocTemplatePosition();

	while(TRUE)
	{
		pTemplate = (CMultiDocTemplate*)m_pApp->GetNextDocTemplate(pos);
		if(!pos)	return NULL;

		POSITION p = pTemplate->GetFirstDocPosition();
		if(p == 0)	
		{
			return NULL;
		}

		while(TRUE)
		{
			pDoc = pTemplate->GetNextDoc(p);
			
			vp = pDoc->GetFirstViewPosition();
			pView = pDoc->GetNextView(vp);

			pFrame = (CMDIChildWnd*)pView->GetParentFrame();
			pFrame->GetWindowText(title);
			
			view = title.Mid(1,1);
			if(!view.Compare("S"))		//ServerView捞搁 
			{
				pFrame->ActivateFrame();		//秦寸 View肺 劝己拳 矫虐绊.. 
				return (CServerView*)pView;
			}
			if(p == 0)	break;		//捞霸 付瘤阜 档钮刚飘烙..
		}
	}

	return NULL;
}

void CMainFrame::MakeNewServerTemplate(int nServerSetIndex)
{
	LeaveLogInFile( "CMainFrame::MakeNewSer~ 's nServerSetIndex = %d" , nServerSetIndex );

	m_pApp->OpenServerTemplate();

	if(m_pApp->m_nCI[ nServerSetIndex - 1 ])
	{
		//秦寸 辑滚悸俊 辑滚 沥焊 夸没 
		PACKET_REQUEST_ALL_SUBSERVER_INFO packet(TRUE, m_pApp->m_ServerDocCount);	//牢磊蔼捞 TRUE捞搁 货肺款 Frame Open沁阑锭狼 Ruest捞促..
		g_pNet->Send(m_pApp->m_nCI[ nServerSetIndex - 1 ], (char*)&packet, packet.GetPacketSize());
	}
	else
	{

⌨️ 快捷键说明

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