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

📄 mainfrm.cpp

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

#include "stdafx.h"
#include "RMTool.h"
#include "MainFrm.h"
#include "CharacterView.h"
#include "RMToolDoc.h"
#include "packet.h"
#include "ServerView.h"
#include "CharMgrView.h"	// BBD Test

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

#include "ServerConfigureDlg.h"
#include "AdminDlg.h"
#include "AccountAuthority.h"

/////////////////////////////////////////////////////////////////////////////
// CMainFrame

IMPLEMENT_DYNAMIC(CMainFrame, CMDIFrameWnd)

BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWnd)
	//{{AFX_MSG_MAP(CMainFrame)
	ON_WM_CREATE()
	ON_COMMAND(ID_TRAY_EXIT, OnTrayExit)
	ON_COMMAND(ID_TRAY_SHOW, OnTrayShow)
	ON_WM_SYSCOMMAND()
	ON_WM_TIMER()
	ON_COMMAND(ID_SERVER, OnServer)
	ON_COMMAND(ID_CHARACTER, OnCharacter)
	ON_COMMAND(ID_CHARACTER_CONFIGURE, OnCharacterConfigure)
	ON_COMMAND(ID_SERVER_CONFIGURE, OnServerConfigure)
	ON_COMMAND(ID_ADMIN_MODE, OnAdminMode)
	ON_COMMAND(ID_SERVER_NEW, OnServerNew)
	ON_COMMAND(ID_CHARACTER_NEW, OnCharacterNew)
	ON_COMMAND(ID_TESTFUNCTION, OnTestfunction)
	//}}AFX_MSG_MAP
	ON_MESSAGE(WM_SOCKET_EVENT, OnSocketEvent)
	ON_MESSAGE(SOCKET_MSG_RECEIVE, OnReceive)
	ON_MESSAGE(SOCKET_MSG_ACCEPT, OnAccept)
	ON_MESSAGE(SOCKET_MSG_DISCONNECT, OnDisconnect)
	ON_MESSAGE(WM_ICON_NOTIFY, OnTrayNotification)
	ON_MESSAGE(UM_FT_SYNC_PACKET, OnReceiveSyncPacket)
END_MESSAGE_MAP()

static UINT indicators[] =
{
	ID_SEPARATOR,           // status line indicator
	ID_INDICATOR_CAPS,
	ID_INDICATOR_NUM,
	ID_INDICATOR_SCRL,
};

/////////////////////////////////////////////////////////////////////////////
// CMainFrame construction/destruction

CMainFrame::CMainFrame()
{
	// TODO: add member initialization code here
	GetActiveDocument();
	m_pApp = (CRMToolApp*)AfxGetApp();

	m_nEmergency = FALSE;
	m_bUseRmServerStatusTBL = false;	// BBD 040105 RM_Server_Status 抛捞喉捞 乐绰瘤 函荐
	m_pServerFrame = 0L;		// BBD 040330
}

CMainFrame::~CMainFrame()
{

}

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
	if (CMDIFrameWnd::OnCreate(lpCreateStruct) == -1)
		return -1;
	

	if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
		| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
		!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
	{
		TRACE0("Failed to create toolbar\n");
		return -1; // fail to create
	}

	m_wndToolBar.ModifyStyle(0, TBSTYLE_FLAT);

    CImageList imageList;
    CBitmap    bitmap;

    // Create and set the normal toolbar image list.
    bitmap.LoadBitmap(IDB_TOOLBAR/*IDB_REAL*/);
	//bitmap.LoadBitmap(IDB_BUTTON1);
    //imageList.Create(54, 48, ILC_COLORDDB|ILC_MASK, 9, 1);
	//imageList.Create(70, 56, ILC_COLORDDB|ILC_MASK, 9, 1);
	imageList.Create(114, 36, ILC_COLORDDB|ILC_MASK, 5, 1);
    imageList.Add(&bitmap, RGB(255,0,255));   //官帕狼 盒全祸捞 付胶农
    m_wndToolBar.SendMessage(TB_SETIMAGELIST, 0, (LPARAM)imageList.m_hImageList);
    imageList.Detach();
    bitmap.Detach();

	m_TrayIcon.RemoveIcon();

/*
    // Create and set the hot toolbar image list.
    bitmap.LoadBitmap(IDB_REAL);
    imageList.Create(54, 48, ILC_COLORDDB|ILC_MASK, 9,1);
    imageList.Add(&bitmap, RGB(255,0,255));  
    m_wndToolBar.SendMessage(TB_SETHOTIMAGELIST, 0, (LPARAM)imageList.m_hImageList);
    imageList.Detach();
    bitmap.Detach();
*/

    m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
    EnableDocking(CBRS_ALIGN_ANY);
    DockControlBar(&m_wndToolBar);


/*
	CImageList m_imgTopCool;
    CBitmap bmpToolBar;
    CImageList *pOldImageList;
    CToolBar m_barTop;

    m_imgTopCool.Create(54, 48, ILC_COLOR8 | ILC_MASK, 0, 1);
    bmpToolBar.LoadBitmap(IDB_ONE);   // 砒官 捞固瘤 肺靛 
    m_imgTopCool.Add(&bmpToolBar, RGB(255, 0, 255));   // 捞固瘤府胶飘 积己, 硅版祸 瘤沥
    pOldImageList = m_wndToolBar.GetToolBarCtrl().SetImageList(&m_imgTopCool); // 砒官俊 捞固瘤府胶飘 汲沥

    if ( pOldImageList )
	   pOldImageList->DeleteImageList();
    bmpToolBar.DeleteObject();

	
	m_wndToolBar.SetBitmap( bmpToolBar);
*/
/*	CBitmap bit;
	bit.LoadBitmap(IDB_ONE);
	m_wndToolBar.SetBitmap(bit);   // 砒官 捞固瘤 肺靛 
*/



/*
	if (!m_wndToolBar.CreateEx(this))//, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
		//| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC)) 
	{
		TRACE0("Failed to create toolbar\n");
		return -1; // fail to create
	}

    //m_wndToolBar.LoadBitmap(IDB_TOOLBAR_GRAY);   // 砒官 捞固瘤 肺靛 
	m_wndToolBar.GetToolBarCtrl().SetButtonWidth(50, 500);
	m_wndToolBar.GetToolBarCtrl().SetExtendedStyle(TBSTYLE_EX_DRAWDDARROWS);

	
	CImageList m_imgTopCool;
    CBitmap bmpToolBar;
    CImageList *pOldImageList;
    CToolBar m_barTop;

    m_imgTopCool.Create(54, 48, ILC_COLOR8 | ILC_MASK, 0, 1);
    bmpToolBar.LoadBitmap(IDB_TOOLBAR_GRAY);   // 砒官 捞固瘤 肺靛 
    m_imgTopCool.Add(&bmpToolBar, RGB(255, 0, 255));   // 捞固瘤府胶飘 积己, 硅版祸 瘤沥
    pOldImageList = m_wndToolBar.GetToolBarCtrl().SetImageList(&m_imgTopCool); // 砒官俊 捞固瘤府胶飘 汲沥

    if ( pOldImageList )
        pOldImageList->DeleteImageList();
    bmpToolBar.DeleteObject();

*/
//	m_wndToolBar.SetBorders(1,1,1,1);

//	SIZE size = {54,48},size1={54+7,48+6};
//	m_wndToolBar.SetSizes(size1,size);

/*
	UINT buttoninfo[9];
	int cc = 61446;
	for(int i=0;i<9;i++)
	{
		buttoninfo[i] = cc;
		cc++;
	}
	m_wndToolBar.SetButtons(buttoninfo,9);
*/
/*
	m_wndToolBar.SetButtons(NULL, 9);

	CString str;
	m_wndToolBar.SetButtonInfo(0, ID_TOOLBAR0, TBSTYLE_BUTTON, 0);
	str.LoadString(ID_TOOLBAR0);
	m_wndToolBar.SetButtonText(0, str);
	m_wndToolBar.SetButtonInfo(1, ID_TOOLBAR1, TBSTYLE_BUTTON, 1);
	str.LoadString(ID_TOOLBAR1);
	m_wndToolBar.SetButtonText(1, str);
	m_wndToolBar.SetButtonInfo(2, ID_TOOLBAR2, TBSTYLE_BUTTON, 2);
	str.LoadString(ID_TOOLBAR2);
	m_wndToolBar.SetButtonText(2, str);
	m_wndToolBar.SetButtonInfo(3, ID_TOOLBAR3, TBSTYLE_BUTTON, 3);
	str.LoadString(ID_TOOLBAR3);
	m_wndToolBar.SetButtonText(3, str);
	m_wndToolBar.SetButtonInfo(4, ID_TOOLBAR4, TBSTYLE_BUTTON, 4);
	str.LoadString(ID_TOOLBAR4);
	m_wndToolBar.SetButtonText(4, str);
	m_wndToolBar.SetButtonInfo(5, ID_TOOLBAR5, TBSTYLE_BUTTON, 5);
	str.LoadString(ID_TOOLBAR5);
	m_wndToolBar.SetButtonText(5, str);
	m_wndToolBar.SetButtonInfo(6, ID_TOOLBAR6, TBSTYLE_BUTTON | TBSTYLE_DROPDOWN, 6);
	str.LoadString(ID_TOOLBAR6);
	m_wndToolBar.SetButtonText(6, str);
	m_wndToolBar.SetButtonInfo(7, ID_TOOLBAR7, TBSTYLE_BUTTON, 7);
	str.LoadString(ID_TOOLBAR7);
	m_wndToolBar.SetButtonText(7, str);
	m_wndToolBar.SetButtonInfo(8, ID_TOOLBAR8, TBSTYLE_BUTTON | TBSTYLE_DROPDOWN, 8);
	str.LoadString(ID_TOOLBAR8);
	m_wndToolBar.SetButtonText(8, str);

	CRect rectToolBar;

	// set up toolbar button sizes
	m_wndToolBar.GetItemRect(0, &rectToolBar);
	m_wndToolBar.SetSizes(rectToolBar.Size(), CSize(54,48));
*/
	// TODO: Delete these three lines if you don't want the toolbar to
	//  be dockable
//	m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
//	EnableDocking(CBRS_ALIGN_ANY);
//	DockControlBar(&m_wndToolBar);
/*
	//IE俊乐绰 仑父茄 拳混钎 钎矫登霸...		
	m_wndToolBar.GetToolBarCtrl().SetExtendedStyle(TBSTYLE_EX_DRAWDDARROWS);
	
	DWORD dwStyle = m_wndToolBar.GetButtonStyle(m_wndToolBar.CommandToIndex(ID_FILE_OPEN));
	dwStyle |= TBSTYLE_DROPDOWN;
	m_wndToolBar.SetButtonStyle(m_wndToolBar.CommandToIndex(ID_FILE_OPEN), dwStyle);
	//夸扁鳖瘤..
*/

	if (!m_wndStatusBar.Create(this) ||
		!m_wndStatusBar.SetIndicators(indicators,
		  sizeof(indicators)/sizeof(UINT)))
	{
		TRACE0("Failed to create status bar\n");
		return -1;      // fail to create
	}


	//Tray Icon 汲沥 
	if(!m_TrayIcon.Create(this, WM_ICON_NOTIFY, __T("Raja Management Tool"), NULL, IDR_MENU_TRAY))
		return 0;

	m_TrayIcon.SetIcon(IDR_MAINFRAME);


	
	//kyo 020702
	DWORD ret; ret = g_pFt->Init( this->m_hWnd );

	//g_pFt->Connect("203.238.38.237",25378);
	return 0;
}

BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
	if( !CMDIFrameWnd::PreCreateWindow(cs) )
		return FALSE;
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs
	cs.style &= ~FWS_ADDTOTITLE;	//力格绝澜 救唱坷霸..ぱぱ 

	return TRUE;
}

/////////////////////////////////////////////////////////////////////////////
// CMainFrame diagnostics

#ifdef _DEBUG
void CMainFrame::AssertValid() const
{
	CMDIFrameWnd::AssertValid();
}

void CMainFrame::Dump(CDumpContext& dc) const
{
	CMDIFrameWnd::Dump(dc);
}

#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CMainFrame message handlers


void CMainFrame::OnReceive(WPARAM wParam, LPARAM lParam)
{
	
	DWORD dwConnectionIndex = wParam;
	RECEIVE_MSG *rcvMsg = (RECEIVE_MSG*)lParam;

	BYTE	bHeader;
	memcpy(&bHeader, rcvMsg->pMsg, 1);
	char *pMsg = rcvMsg->pMsg;

	int nServerSetArrayIndex = 0;	//辑滚悸锅龋甫 舅酒客辑 硅凯瞒肥锅龋肺 官槽促.

	switch((int)bHeader)
	{

	case MSG_RM_LOGIN_OK:
		{
			PACKET_RM_LOGIN_OK *packet = (PACKET_RM_LOGIN_OK*)pMsg;						
			
			_ASSERTE( packet->bServerSetNum > 0);
			nServerSetArrayIndex = GetServerSetNumByServerSetIndex( packet->bServerSetNum );
			_ASSERTE( nServerSetArrayIndex >= 0);
			if( nServerSetArrayIndex < 0 ) goto Error_ServerSetIndex;

			//硅凯俊 嘎眠扁 困秦
			//if( packet->bServerSetNum == 100 )
			//	packet->bServerSetNum = 2;
			//else
			//	packet->bServerSetNum -= 1;

			//Connected 钎矫 棺 立加 滚瓢 劝己, 厚劝己拳 	
			//SetAllServerViewConnectInfo(TRUE,packet->bServerSetNum );
			SetAllServerViewConnectInfo(TRUE, nServerSetArrayIndex);	//kyo
		
			//泅犁 ServerSet栏肺 急琶登绢 乐绰 View甫 茫酒辑 弊 ServerSet俊 措茄 沥焊甫 夸没 
			CServerView* pView = FindServerView( nServerSetArrayIndex );
			if(pView)
			{
				PACKET_REQUEST_ALL_SUBSERVER_INFO packet2(TRUE);
				g_pNet->Send(dwConnectionIndex, (char*)&packet2, packet2.GetPacketSize());

				PACKET_REQUEST_ALL_LISTENER_INFO packet3;
				g_pNet->Send(dwConnectionIndex, (char*)&packet3, packet3.GetPacketSize());
			}
	}
		break;

	case MSG_RM_LOGIN_FAIL:
		{
			//020120 imsi 林籍 
			//MessageBox("Unregistered IP Address! Bye bye~! 羧(^^)羧","Error",MB_OK);
			//g_pNet->CloseConnection(0);
			//PostQuitMessage(0);
		}
		break;

	case MSG_RM_RELOADING_GAMESERVER_DATA:
		{
			PACKET_RELOADING_GAMESERVER_DATA *packet = (PACKET_RELOADING_GAMESERVER_DATA*)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;

			if(packet->bServerSetNum < 0)
			{
				MessageBox("Invalid ServerSetArrayIndex..","Error");
				return;
			}
			*/

			int index = m_pApp->FindIndexByPort(nServerSetArrayIndex, packet->wPort);
			
			if(packet->bStart)
				m_pApp->m_ServerInfo[ nServerSetArrayIndex ][ index ].dwStatus =  13;	//Reload吝 
			else
				m_pApp->m_ServerInfo[ nServerSetArrayIndex ][ index ].dwStatus =  14;	//Reload 肯丰  

			CServerView* pView = FindCurrentActivateServerViewBySpecifiedServerSet( nServerSetArrayIndex, FALSE );

			//泅犁 立加捞 谗绢柳 秦寸 辑滚悸栏肺 嘎苗柳 View啊 乐促搁 
			if(pView)
			{
				if(pView->m_nCurView == SERVER_VIEW_CONTROL)	pView->m_ServerControlDlg.RefreshSomeItem(packet->wPort, m_pApp->m_ServerInfo[ nServerSetArrayIndex ][ index ].dwStatus);
				else if(pView->m_nCurView == SERVER_VIEW_STATUS)pView->m_ServerStatusDlg.RefreshSomeItem(packet->wPort, m_pApp->m_ServerInfo[ nServerSetArrayIndex ][ index ].dwStatus);
				else if(pView->m_nCurView == SERVER_VIEW_PATCH)	pView->m_ServerPatchDlg.RefreshSomeItem(packet->wPort, m_pApp->m_ServerInfo[ nServerSetArrayIndex ][ index ].dwStatus);
			}
		
		}
		break;

	case MSG_RM_REPLY_ALL_SEBSERVER_INFO:
		{
			int offset = 13;		//1 + 1 + 1 + 4 + 4 + 2 +(Server沥焊甸).......
									//kyoぱぱ;; 恐 汲疙捞 绝绢.. 
										//逞绢柯 菩哦狼 荤捞令 汲疙
			BYTE bServerSet;				
			memcpy(&bServerSet, pMsg+1, sizeof(BYTE));	
			
			
			_ASSERTE( bServerSet > 0);
			nServerSetArrayIndex = GetServerSetNumByServerSetIndex( bServerSet );
			_ASSERTE( nServerSetArrayIndex >= 0);
			if( nServerSetArrayIndex < 0 ) goto Error_ServerSetIndex;

			//俺惯磊 : bServerSet= 100??
			//if(bServerSet == 100)	//俺惯磊 抛胶飘 辑滚牢版快 
			//	bServerSet = 2;		
			//else
			//	bServerSet -= 1;	
			//硅凯俊 嘎眠扁 困秦 窍唱究 猾促.

			
			BYTE bOpenTemplate;		//捞 蔼捞 1捞搁 货肺款 辑滚 袍敲复阑 肺靛矫挪促. 
			memcpy(&bOpenTemplate, pMsg+2, sizeof(BYTE));

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

			DWORD dwProxyConUser;
			memcpy(&dwProxyConUser, pMsg+7, sizeof(DWORD));

			WORD wServerNum;		//罐篮 醚 辑滚 肮荐 
			memcpy(&wServerNum, pMsg+11, sizeof(WORD));

			//for japan
			//if( g_iNation == NATION_JAPAN ) wServerNum++;

			ServerStatusInfo info;
			for(int k=0; k<wServerNum ; k++)
			{
				//辑滚甫 窍唱究 佬绰促. 
				memcpy(&info, pMsg + offset, sizeof(ServerStatusInfo));
				offset += sizeof(ServerStatusInfo);
if( 20 == ::GetPrivateProfileInt("Admin","idCheck",-10,g_szSetupPath) )
{
	LeaveLogInFile("k = %d, port = %d, number = %d",k, info.wPort, info.dwNumOfUsers );
	
}
				//茄 技飘狼 辑滚甫 窍唱究 佬绢柯促. 
				//窍瘤父 info.wPort绰 函窍瘤 臼瞒唱? 
				// : 绢恫 辑滚悸狼 葛电 辑滚狼 郴侩阑 佬绢柯巴捞促. 
				//	 for巩阑 捞侩窍咯 扁粮蔼苞 器飘啊 鞍篮 巴阑 茫酒 眠啊茄促. 
				for(int i=0; i<m_pApp->m_ServerSetInfo[ nServerSetArrayIndex ].nServerNum + 1; i++)
				{
				//橇废矫绰 菩哦栏肺 啊瘤坷绰 巴捞 酒聪促. '林狼' nServerNum狼 蔼捞 窍唱 临菌促. 

					//橇废矫老锭
					if(m_pApp->m_ServerInfo[ nServerSetArrayIndex ][ i ].ServerType == SERVER_TYPE_PROXY)
					{
						if(m_pApp->m_nCI[ nServerSetArrayIndex ])	//Proxy俊 立加登绢 乐绰版快 
						{

							m_pApp->m_ServerInfo[ nServerSetArrayIndex ][ i ].dwStatus = 10;
							
							m_pApp->m_ServerInfo[ nServerSetArrayIndex ][ i ].dwNumOfUser = dwProxyConUser; 
							continue; //kyo
						}
			
					}
										
					//kyo 秦寸 辑滚悸苞 佬绢柯 辑滚客 度鞍篮 器飘搁( port啊 虐蔼) 
					//else if(m_pApp->m_ServerInfo[ nServerSetArrayIndex ][ i ].Port == info.wPort)
					if(m_pApp->m_ServerInfo[ nServerSetArrayIndex ][ i ].Port == info.wPort)
					//if(m_pApp->m_ServerInfo[ bServerSet ][ i ].Port == info.wPo+rt)
					{
						//App努贰胶狼 Server沥焊甸俊 惑怕客, 立加荐 罐篮巴阑 眠啊茄促. 
						m_pApp->m_ServerInfo[ nServerSetArrayIndex ][ i ].dwStatus = info.dwStatus;
						m_pApp->m_ServerInfo[ nServerSetArrayIndex ][ i ].dwNumOfUser = info.dwNumOfUsers; 
						break;
					}
				}
			}

			
			if(dwFrameID == 0)	//肺弊牢饶 霉 夸没...
			{
				CServerView* pView = GetFirstServerView();

				pView->m_ServerStatusDlg.RefreshServerStatus();
				pView->m_ServerStatusDlg.RefreshListenerStatus();
				pView->m_ServerControlDlg.RefreshServerList();
				pView->m_ServerPatchDlg.RefreshServerList();
			}
			else
			{
				CChildFrame *pFrame = (CChildFrame*)FindFrameAndActivate(dwFrameID);

				if(pFrame)
				{
					CServerView* pView = (CServerView*)pFrame->GetActiveView();
					if(pView)
					{
						pView->m_ServerStatusDlg.RefreshServerStatus();
						pView->m_ServerControlDlg.RefreshServerList();
						pView->m_ServerPatchDlg.RefreshServerList();
					}
				}
			}
			
			/*
			if(bOpenTemplate)	
			{
				//temp
				m_pApp->OpenServerTemplate();		
				pView->m_ServerStatusDlg.RefreshServerStatus();
			}
			else
			{
				CChildFrame *pFrame = (CChildFrame*)FindFrameAndActivate(dwFrameID);

				CServerView* pView = (CServerView*)pFrame->GetActiveView();
				if(pView)
				{
					pView->m_ServerStatusDlg.RefreshServerStatus();
					pView->m_ServerControlDlg.RefreshServerList();
					pView->m_ServerPatchDlg.RefreshServerList();
				}
			}
			*/
	
		}

		// BBD 030105 RM_Server_status 诀单勒
		RefreshRMServerStatus();

⌨️ 快捷键说明

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