📄 servertoolview.cpp
字号:
// ServerToolView.cpp : implementation of the CServerToolView class
//
#include "stdafx.h"
#include "ServerTool.h"
#include "MainFrm.h"
#include "ServerToolDoc.h"
#include "ServerToolView.h"
#include "ServerSetMng.h"
#include "MSInfoDlg.h"
#include "UserCount.h"
#include "MHNetwork.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
CServerToolView* g_ServerToolView = NULL;
extern sMSGOPTION gMsgOption;
/////////////////////////////////////////////////////////////////////////////
// CServerToolView
IMPLEMENT_DYNCREATE(CServerToolView, CFormView)
BEGIN_MESSAGE_MAP(CServerToolView, CFormView)
//{{AFX_MSG_MAP(CServerToolView)
ON_CBN_SELCHANGE(IDC_COMBO_SERVERSET, OnSelchangeComboServerset)
ON_BN_CLICKED(IDC_BUTTON_SERVER_ON, OnButtonServerOn)
ON_BN_CLICKED(IDC_BUTTON_SERVER_OFF, OnButtonServerOff)
ON_WM_TIMER()
ON_EN_CHANGE(IDC_EDIT_MESSAGE, OnChangeEditMessage)
ON_BN_CLICKED(IDC_BUTTON_COMMAND_SEND, OnButtonCommandSend)
ON_NOTIFY(NM_DBLCLK, IDC_LISTCONTROL_DIST, OnDblclkListcontrolDist)
ON_NOTIFY(NM_DBLCLK, IDC_LISTCONTROL_AGENT, OnDblclkListcontrolAgent)
ON_NOTIFY(NM_DBLCLK, IDC_LISTCONTROL_MAP, OnDblclkListcontrolMap)
ON_NOTIFY(NM_DBLCLK, IDC_LISTCONTROL_MURIM, OnDblclkListcontrolMurim)
ON_NOTIFY(NM_RDBLCLK, IDC_LISTCONTROL_MAP, OnRdblclkListcontrolMap)
ON_NOTIFY(NM_RDBLCLK, IDC_LISTCONTROL_DIST, OnRdblclkListcontrolDist)
ON_NOTIFY(NM_RDBLCLK, IDC_LISTCONTROL_AGENT, OnRdblclkListcontrolAgent)
ON_NOTIFY(NM_RDBLCLK, IDC_LISTCONTROL_MURIM, OnRdblclkListcontrolMurim)
ON_BN_CLICKED(IDC_BUTTON_NOTIFY_EDIT, OnButtonNotifyEdit)
ON_BN_CLICKED(IDC_BUTTON_NOTIFY, OnButtonNotify)
ON_WM_DESTROY()
ON_BN_CLICKED(IDC_BUTTON_SERVER_REFRESH, OnButtonServerRefresh)
ON_BN_CLICKED(IDC_BUTTON_AUTOPATCH, OnButtonAutopatch)
ON_COMMAND(ID_FILE_MAS_OPEN, OnFileMasOpen)
ON_BN_CLICKED(IDC_BUTTON_USERLEVEL, OnButtonUserlevel)
ON_BN_CLICKED(IDC_BUTTON_OFFMSGBOX, OnButtonOffmsgbox)
ON_BN_CLICKED(IDC_BUTTON_ONMSGBOX, OnButtonOnmsgbox)
ON_BN_CLICKED(IDC_BUTTON_SERVER_USEROUT, OnButtonServerUserout)
ON_BN_CLICKED(IDC_BUTTON_VERSION_CHANGE, OnButtonVersionChange)
ON_BN_CLICKED(IDC_BUTTON_MAXUSER_CHANGE, OnButtonMaxuserChange)
ON_BN_CLICKED(IDC_BUTTON_USERCOUNT, OnButtonUsercount)
ON_NOTIFY(NM_CLICK, IDC_LISTCONTROL_DIST, OnClickListcontrolDist)
ON_NOTIFY(NM_CLICK, IDC_LISTCONTROL_AGENT, OnClickListcontrolAgent)
ON_NOTIFY(NM_CLICK, IDC_LISTCONTROL_MAP, OnClickListcontrolMap)
ON_BN_CLICKED(IDC_BUTTON_TERMINATESERVER, OnButtonTerminateserver)
ON_BN_CLICKED(IDC_BUTTON_OPTION, OnButtonOption)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CServerToolView construction/destruction
CServerToolView::CServerToolView()
: CFormView(CServerToolView::IDD)
{
//{{AFX_DATA_INIT(CServerToolView)
m_strCurTime = _T("");
m_strCurFileName = _T("None");
m_stNotify = _T("None");
m_stUserCount = _T("0");
m_strDir = _T("");
//}}AFX_DATA_INIT
// TODO: add construction code here
g_ServerToolView = this;
m_bReconnect = FALSE;
m_dwDisconNum = 0;
m_wRefreshTime = 30;
m_wWriteCountTime = 30;
m_dwServerOffTime = 0;
m_nToolLevel = eOperPower_Patroller;
m_bServerOff = FALSE;
m_pUserCountDlg = NULL;
m_pMSInfoDlg = NULL;
m_nKill = 0;
}
CServerToolView::~CServerToolView()
{
}
void CServerToolView::DoDataExchange(CDataExchange* pDX)
{
CFormView::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CServerToolView)
DDX_Control(pDX, IDC_BUTTON_OPTION, m_btnMsgOption);
DDX_Control(pDX, IDC_BUTTON_USERCOUNT, m_btnUserCount);
DDX_Control(pDX, IDC_BUTTON_TERMINATESERVER, m_btnTServer);
DDX_Control(pDX, IDC_BUTTON_VERSION_CHANGE, m_btnVersionChange);
DDX_Control(pDX, IDC_BUTTON_MAXUSER_CHANGE, m_btnMaxUserChange);
DDX_Control(pDX, IDC_EDIT_MAXUSER, m_editMaxUser);
DDX_Control(pDX, IDC_EDIT_VERSION, m_editVersion);
DDX_Control(pDX, IDC_BUTTON_SERVER_USEROUT, m_btnUserOut);
DDX_Control(pDX, IDC_BUTTON_SERVER_REFRESH, m_btnServerRefresh);
DDX_Control(pDX, IDC_BUTTON_SERVER_OFF, m_btnServerOff);
DDX_Control(pDX, IDC_BUTTON_SERVER_ON, m_btnServerOn);
DDX_Control(pDX, IDC_COMBO_USERLEVEL, m_cbUserLevel);
DDX_Control(pDX, IDC_BUTTON_USERLEVEL, m_btnChangeUserLevel);
DDX_Control(pDX, IDC_BUTTON_AUTOPATCH, m_btnAutoPatch);
DDX_Control(pDX, IDC_EDIT_REPEAT_NUM, m_editRepeatNum);
DDX_Control(pDX, IDC_BUTTON_NOTIFY_EDIT, m_btnNotifyEdit);
DDX_Control(pDX, IDC_BUTTON_NOTIFY, m_btnNotify);
DDX_Control(pDX, IDC_STATIC_TOTAL, m_stTotal);
DDX_Control(pDX, IDC_LISTCONTROL_TOTAL, m_lcTotal);
DDX_Control(pDX, IDC_COMBO_SERVERSET, m_cbServerSet);
DDX_Text(pDX, IDC_STATIC_CURTIME, m_strCurTime);
DDX_Control(pDX, IDC_LISTCONTROL_DIST, m_lcDist);
DDX_Control(pDX, IDC_LISTCONTROL_AGENT, m_lcAgent);
DDX_Control(pDX, IDC_LISTCONTROL_MAP, m_lcMap);
DDX_Control(pDX, IDC_STATIC_DISTRIBUTE, m_stDist);
DDX_Control(pDX, IDC_STATIC_AGENT, m_stAgent);
DDX_Control(pDX, IDC_STATIC_MAP, m_stMap);
DDX_Control(pDX, IDC_COMBO_SERVERSET_COMMAND, m_cbCmdServerSet);
DDX_Control(pDX, IDC_EDIT_MESSAGE, m_MessageEdit);
DDX_Control(pDX, IDC_EDIT_REPEAT, m_RepeatEdit);
DDX_Text(pDX, IDC_STATIC_FILENAME, m_strCurFileName);
DDX_Text(pDX, IDC_STATIC_NOTIFY, m_stNotify);
DDX_Text(pDX, IDC_STATIC_USERCOUNT, m_stUserCount);
//}}AFX_DATA_MAP
}
BOOL CServerToolView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CFormView::PreCreateWindow(cs);
}
void CServerToolView::OnInitialUpdate()
{
CFormView::OnInitialUpdate();
GetParentFrame()->RecalcLayout();
ResizeParentToFit();
char temp[256];
sprintf( temp, "ServerTool(%s)", SERVERTOOLVERSION );
AfxGetMainWnd()->SetWindowText( temp );
m_Font.CreatePointFont(100, "Arial");
m_lcTotal.SetFont( &m_Font );
m_lcDist.SetFont( &m_Font );
m_lcAgent.SetFont( &m_Font );
m_lcMap.SetFont( &m_Font );
// timer 汲沥( 1檬付促 )
SetTimer( 0, 1000, NULL );
// 捞固瘤 阂矾坷扁
m_StateImageList.Create( IDB_BITMAP_STATE, 16, 1, RGB(255,255,255) );
m_bmpGray.LoadBitmap( IDB_BITMAP_GRAY );
m_bmpGreen.LoadBitmap( IDB_BITMAP_GREEN );
InitServerControl();
InitServerMonitor();
InitCommand();
if( !Init() )
{
GetParentFrame()->PostMessage( WM_CLOSE );
return;
}
// Login Dlg
if( m_LoginDlg.DoModal() == IDCANCEL && !m_LoginDlg.m_bConnect )
{
GetParentFrame()->PostMessage( WM_CLOSE );
}
else
{
LOG( "!!!!! ServerTool Start !!!!!" );
SERVERSETMNG->DoQueryClientExeVersion();
SERVERSETMNG->DoQueryMaxUser();
SERVERSETMNG->DoQueryUserLevel();
SERVERSETMNG->DoQueryUserCount();
}
UpdateData( FALSE );
}
BOOL CServerToolView::Init()
{
if( !SERVERSETMNG->Init( "MASList.ini" ) )
return FALSE;
// ReadINI
ReadIniFile( "Tool.ini" );
// Network Init
if( !NETWORK->Init( this->GetParentFrame()->m_hWnd ) )
return FALSE;
m_cbServerSet.ResetContent();
m_cbCmdServerSet.ResetContent();
m_cbServerSet.AddString( "All Server" );
m_cbCmdServerSet.AddString( "All Server" );
DWORD tick = GetTickCount();
CServerSet* pServerSet = NULL;
int count = 0;
int successedset = -1;
for( int i = 0; i < SERVERSETMNG->GetMaxServerSet(); ++i )
{
pServerSet = SERVERSETMNG->GetServerSet( i );
if( pServerSet )
{
if( !NETWORK->ConnectToServer( i, pServerSet->m_sMASIP, pServerSet->m_nMASPort ) )
{
pServerSet->Release();
}
else
{
pServerSet->m_dwMsgCheckTime = tick;
m_cbServerSet.AddString( pServerSet->m_sServerSetName );
m_cbCmdServerSet.AddString( pServerSet->m_sServerSetName );
if(successedset == -1)
successedset = i;
++count;
}
}
}
m_cbServerSet.SetCurSel( 0 );
m_cbCmdServerSet.SetCurSel( 0 );
if( count )
{
m_LoginDlg.m_nServerSet = successedset;
UpdateServerControl();
OnSelchangeComboServerset(); // UpdateServerMonitor()
}
else
{
MessageBox( "Can't Connect To MAS!!", "Error!!", MB_OK );
return FALSE;
}
m_LoginDlg.m_nReceiveCount = count;
return TRUE;
}
/////////////////////////////////////////////////////////////////////////////
// CServerToolView diagnostics
#ifdef _DEBUG
void CServerToolView::AssertValid() const
{
CFormView::AssertValid();
}
void CServerToolView::Dump(CDumpContext& dc) const
{
CFormView::Dump(dc);
}
//// 葛崔府胶 措拳惑磊 庆歹巩力肺 瘤框....
/*
CServerToolDoc* CServerToolView::GetDocument() // non-debug version is inline
{
// ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CServerToolDoc)));
// return (CServerToolDoc*)m_pDocument;
}
*/
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CServerToolView message handlers
void CServerToolView::OnTimer(UINT nIDEvent)
{
SYSTEMTIME time;
GetLocalTime( &time );
m_strCurTime.Format( "%d-%d-%d %d:%d:%d", time.wYear, time.wMonth, time.wDay, time.wHour, time.wMinute, time.wSecond );
/*
#ifdef _CHINA
if( m_nToolLevel == eOperPower_Master )
{
// UserCount
if( (time.wSecond%m_wRefreshTime) == (m_wRefreshTime-2) )
SERVERSETMNG->DoQueryUserCount();
if( (time.wSecond%m_wWriteCountTime) == 0 )
{
SERVERSETMNG->WriteUserCount( time );
UpdateUserCount();
}
}
#else
*/
if( m_nToolLevel == eOperPower_Master || m_nToolLevel == eOperPower_Monitor )
{
// UserCount
if( (time.wSecond%m_wRefreshTime) == (m_wRefreshTime-2) )
SERVERSETMNG->DoQueryUserCount();
if( m_nToolLevel == eOperPower_Master )
{
if( (time.wSecond%m_wWriteCountTime) == 0 )
{
SERVERSETMNG->WriteUserCount( time );
UpdateUserCount();
}
}
}
// 馆汗 傍瘤 荤亲
if( m_bNotify )
{
--m_nCheckTime;
if( m_nCheckTime <= 0 )
{
m_nCheckTime = m_nRepeatTime;
if( m_NotifyMessage.IsRepeat() )
{
char* pmsg = m_NotifyMessage.GetMessage();
if( pmsg )
{
CString str;
m_cbCmdServerSet.GetLBText( m_cbServerSet.GetCurSel(), str );
SERVERSETMNG->DoSendMessage( (char*)(LPCTSTR)str, pmsg );
char temp[256];
m_editRepeatNum.SetWindowText( itoa( m_NotifyMessage.GetRepeatNum(), temp, 10 ) );
m_stNotify = pmsg;
}
}
else
{
m_bNotify = FALSE;
m_btnNotify.SetBitmap( m_bmpGray );
}
}
}
// MAS客狼 立加捞 谗绢脸阑锭 促矫 立加茄促.
if( m_bReconnect )
{
ReConnectToMAS();
LOG( "Disconnect : Reconnect To MAS (Count = %d)", m_dwDisconNum );
}
// 蜡历 立加 谗扁.
if( m_bServerOff )
{
++m_dwServerOffTime;
if( m_dwServerOffTime > 5 )
{
SERVERSETMNG->DoServerSetOffAfterUserDiscon( (char*)(LPCTSTR)m_strAutoPatch );
m_bServerOff = FALSE;
m_dwServerOffTime = 0;
LOG( "ServerOffAfterUserDiscon : %s", (char*)(LPCTSTR)m_strAutoPatch );
}
}
// MsgCheckTime
// if( (time.wMinute%2) == 0 ) // 2盒付促
if( time.wSecond == 0 ) // 1盒付促
{
DWORD tick = GetTickCount();
CServerSet* pServerSet = NULL;
for( int i = 0; i < SERVERSETMNG->GetMaxServerSet(); ++i )
{
pServerSet = SERVERSETMNG->GetServerSet( i );
if( pServerSet )
if( pServerSet->m_bInit )
if( pServerSet->IsThereOnServer() )
{
if( (tick - pServerSet->m_dwMsgCheckTime) >= 180000 )
{
LOG( "MsgCheckTime : Reconnect To MAS" );
ReConnectToMAS();
return;
}
}
}
}
UpdateData( FALSE );
CFormView::OnTimer(nIDEvent);
}
void CServerToolView::OnDestroy()
{
CFormView::OnDestroy();
KillTimer( 0 );
}
// Init -------------------------------------------------------------------------------------------
void CServerToolView::InitServerControl()
{
m_editVersion.SetWindowText( "Version" );
m_editMaxUser.SetWindowText( "MaxUser" );
// userlevel
CString user[7] = { "God", "Programmer", "Developer", "GM", "SuperUser", "User", "SubUser" };
for( int i = 0; i < 7; ++i )
m_cbUserLevel.AddString( user[i] );
m_cbUserLevel.SetCurSel( 0 );
EnableServerControl( FALSE );
}
void CServerToolView::InitServerMonitor()
{
char* tcolumn[4] = { "State", "UserCount", "Server Name", "Index" };
int tcolumnsize[4] = { 50, 70, 80, 50 };
// listctrl column 汲沥
LV_COLUMN lvcolumn;
lvcolumn.mask = LVCF_FMT | LVCF_SUBITEM | LVCF_TEXT | LVCF_WIDTH;
lvcolumn.fmt = LVCFMT_CENTER;
int i;
for( i = 0; i < 4; ++i )
{
lvcolumn.iSubItem = i;
lvcolumn.cx = tcolumnsize[i];
lvcolumn.pszText = tcolumn[i];
m_lcTotal.InsertColumn( i, &lvcolumn );
}
//
char* column[7] = { "State", "UserCount", "Server Name", "MapNum", "IP", "Port", "Index" };
int columnsize[7] = { 50, 70, 80, 50, 100, 50, 30 };
for( i = 0; i < 7; ++i )
{
lvcolumn.iSubItem = i;
lvcolumn.cx = columnsize[i];
lvcolumn.pszText = column[i];
m_lcDist.InsertColumn( i, &lvcolumn );
m_lcAgent.InsertColumn( i, &lvcolumn );
// m_lcMurim.InsertColumn( i, &lvcolumn );
m_lcMap.InsertColumn( i, &lvcolumn );
}
// style
m_lcTotal.SetExtendedStyle( LVS_EX_FULLROWSELECT );
m_lcDist.SetExtendedStyle( LVS_EX_FULLROWSELECT );
m_lcAgent.SetExtendedStyle( LVS_EX_FULLROWSELECT );
// m_lcMurim.SetExtendedStyle( LVS_EX_FULLROWSELECT );
m_lcMap.SetExtendedStyle( LVS_EX_FULLROWSELECT );
// state image
m_lcTotal.SetImageList( &m_StateImageList, LVSIL_STATE );
m_lcDist.SetImageList( &m_StateImageList, LVSIL_STATE );
m_lcAgent.SetImageList( &m_StateImageList, LVSIL_STATE );
// m_lcMurim.SetImageList( &m_StateImageList, LVSIL_STATE );
m_lcMap.SetImageList( &m_StateImageList, LVSIL_STATE );
ShowServerMonitor( FALSE );
EnableServerMonitor( FALSE );
}
void CServerToolView::InitCommand()
{
// 傍瘤 button
m_btnNotify.SetBitmap( m_bmpGray );
m_bNotify = FALSE;
// 馆汗 冉荐 edit
m_editRepeatNum.SetWindowText( "1" );
m_nRepeatNum = 1;
// 矫埃 edit
m_RepeatEdit.SetWindowText( "60" );
m_nRepeatTime = m_nCheckTime = 60;
// message edit
m_MessageEdit.SetLimitText( 256 );
EnableCommand( FALSE );
}
void CServerToolView::EnableServerControl( BOOL bShow )
{
m_cbServerSet.EnableWindow( TRUE );
m_btnServerOn.EnableWindow( bShow );
m_btnServerOff.EnableWindow( bShow );
m_btnServerRefresh.EnableWindow( TRUE );
m_btnUserOut.EnableWindow( FALSE );
m_editVersion.EnableWindow( bShow );
m_editMaxUser.EnableWindow( bShow );
m_cbUserLevel.EnableWindow( bShow );
m_btnVersionChange.EnableWindow( bShow );
m_btnMaxUserChange.EnableWindow( bShow );
m_btnChangeUserLevel.EnableWindow( bShow );
m_btnUserCount.EnableWindow( bShow );
m_btnAutoPatch.EnableWindow( bShow );
}
void CServerToolView::EnableServerMonitor( BOOL bShow )
{
m_lcTotal.EnableWindow( bShow );
m_stDist.EnableWindow( bShow );
m_stAgent.EnableWindow( bShow );
m_stMap.EnableWindow( bShow );
}
void CServerToolView::EnableCommand( BOOL bShow )
{
m_cbCmdServerSet.EnableWindow( bShow );
m_btnNotify.EnableWindow( bShow );
m_editRepeatNum.EnableWindow( bShow );
m_RepeatEdit.EnableWindow( bShow );
m_btnNotifyEdit.EnableWindow( bShow );
m_MessageEdit.EnableWindow( bShow );
}
void CServerToolView::EnableToolFromLevel( int nUserLevel )
{
m_nToolLevel = nUserLevel;
switch( m_nToolLevel )
{
case eOperPower_Monitor:
{
EnableServerControl( FALSE );
EnableServerMonitor( TRUE );
EnableCommand( FALSE );
}
break;
case eOperPower_Master:
{
EnableServerControl( TRUE );
EnableServerMonitor( TRUE );
EnableCommand( TRUE );
}
break;
}
}
void CServerToolView::ShowServerMonitor( BOOL bShow )
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -