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

📄 servertoolview.cpp

📁 墨香最新私服
💻 CPP
📖 第 1 页 / 共 3 页
字号:
// 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 + -