📄 mainfrm.cpp
字号:
// 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 + -