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

📄 usercount.cpp

📁 墨香最新私服
💻 CPP
字号:
// UserCount.cpp : implementation file
//

#include "stdafx.h"
#include "servertool.h"
#include "UserCount.h"
#include "ServerSetMng.h"
#include "MainFrm.h"
#include "ServerToolView.h"

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

/////////////////////////////////////////////////////////////////////////////
// CUserCount dialog


CUserCount::CUserCount(CWnd* pParent /*=NULL*/)
	: CDialog(CUserCount::IDD, pParent)
{
	//{{AFX_DATA_INIT(CUserCount)
	//}}AFX_DATA_INIT
	m_bInit = FALSE;
}


void CUserCount::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CUserCount)
	DDX_Control(pDX, IDC_COMBO_SERVERSET, m_cbServerSet);
	DDX_Control(pDX, IDC_TREE_USERCOUNT, m_tcUserCount);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CUserCount, CDialog)
	//{{AFX_MSG_MAP(CUserCount)
	ON_CBN_SELCHANGE(IDC_COMBO_SERVERSET, OnSelchangeComboServerset)
	ON_BN_CLICKED(IDC_BUTTON_REFRESH, OnButtonRefresh)
	ON_WM_CLOSE()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CUserCount message handlers

BOOL CUserCount::OnInitDialog() 
{
	CDialog::OnInitDialog();

	m_Font.CreatePointFont(100, "Arial");
	m_tcUserCount.SetFont( &m_Font );
	
	// TODO: Add extra initialization here
	InitData();
	
	m_bInit = TRUE;

	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CUserCount::InitData()
{
	// combobox
	m_cbServerSet.ResetContent();
	m_cbServerSet.AddString( "All Server" );
	CServerSet* pServerSet = NULL;
	for( int i = 0; i < SERVERSETMNG->GetMaxServerSet(); ++i )
	{
		pServerSet = SERVERSETMNG->GetServerSet( i );
		if( pServerSet->m_bInit )
		{
			m_cbServerSet.AddString( pServerSet->m_sServerSetName );
		}
	}
	m_cbServerSet.SetCurSel( 0 );

	// treecontrol
	UpdateTreeCtrl();

	SERVERSETMNG->DoQueryChannelInfo( "All Server" );
}

HTREEITEM CUserCount::InsertItem( HTREEITEM hRoot, char* name, BOOL bChild )
{
	TV_INSERTSTRUCT tvinsert;
	tvinsert.hParent = hRoot;
	tvinsert.hInsertAfter = TVI_LAST;
	tvinsert.item.pszText = name;

	HTREEITEM hItem;
	
	if( bChild )
	{
		tvinsert.item.mask = TVIF_TEXT | TVIF_CHILDREN;
		hItem = m_tcUserCount.InsertItem( &tvinsert );

		return hItem;
	}
	else
	{
		tvinsert.item.mask = TVIF_TEXT;
		hItem = m_tcUserCount.InsertItem( &tvinsert );
		
		return NULL;
	}
}

BOOL CUserCount::DestroyWindow() 
{
	m_bInit = FALSE;
	
	return CDialog::DestroyWindow();
}

void CUserCount::SetChannelData( int nServerSet, MSG_CHANNEL_INFO_MORNITOR* pChannelInfo )
{
	CServerSet* pServerSet = SERVERSETMNG->GetServerSet( nServerSet );
	if( pServerSet )
	{
		CServer* pServer = pServerSet->GetServer( pChannelInfo->sServerIP, pChannelInfo->wServerPort );
		if( pServer )
		{
			pServer->SetChannelUserCount( &pChannelInfo->ChannelInfo );
			UpdateTreeCtrl();
		}
	}
}

void CUserCount::UpdateTreeCtrl()
{
	m_tcUserCount.DeleteAllItems();
	
	// treecontrol
	CString str;
	CServerSet* pServerSet = NULL;
	CServer* pServer = NULL;
	HTREEITEM hRoot, hRoot1;
	char temp[64];

	int index = m_cbServerSet.GetCurSel();
	if( index == 0 )	// AllServer
	{
		for( int i = 0; i < SERVERSETMNG->GetMaxServerSet(); ++i )
		{
			pServerSet = SERVERSETMNG->GetServerSet( i );
			if( pServerSet->m_bInit )
			{
				hRoot = InsertItem( NULL, pServerSet->m_sServerSetName, TRUE );
				vector<CServer*>::iterator iter = pServerSet->m_vecServer.begin();
				for(;iter != pServerSet->m_vecServer.end();++iter)
				{
					pServer = (*iter);
					if( pServer->m_nServerKind == MAP_SERVER )
					{
						if( pServer->m_nState == eServerState_Off )
							sprintf( temp, "%s : 0", pServer->m_sName );							
						else
							sprintf( temp, "%s : %d", pServer->m_sName, pServer->m_dwUserCount );

						if( pServer->m_nMaxChannel == 0 )
							hRoot1 = InsertItem( hRoot, temp, FALSE );
						else
						{
							hRoot1 = InsertItem( hRoot, temp, TRUE );					
							
							for( int j = 0; j < pServer->m_nMaxChannel; ++j )
							{
								sprintf( temp, "Channel %d : %4d", j+1, pServer->m_nChannelUserCount[j] );
								InsertItem( hRoot1, temp, FALSE );
							}
						}						
					}
				}
			}
		}
	}
	else
	{
		m_cbServerSet.GetLBText( m_cbServerSet.GetCurSel(), str );
		pServerSet = SERVERSETMNG->GetServerSet( (char*)(LPCTSTR)str );
		if( !pServerSet )	
			return;

		if( pServerSet->m_bInit )
		{
			hRoot = InsertItem( NULL, pServerSet->m_sServerSetName, TRUE );
			vector<CServer*>::iterator iter = pServerSet->m_vecServer.begin();
			for(;iter != pServerSet->m_vecServer.end();++iter)
			{
				pServer = (*iter);
				if( pServer->m_nServerKind == MAP_SERVER )
				{
					if( pServer->m_nState == eServerState_Off )
						sprintf( temp, "%s : 0", pServer->m_sName );							
					else
						sprintf( temp, "%s : %d", pServer->m_sName, pServer->m_dwUserCount );
					
					if( pServer->m_nMaxChannel == 0 )
						hRoot1 = InsertItem( hRoot, temp, FALSE );
					else
					{
						hRoot1 = InsertItem( hRoot, temp, TRUE );					
						
						for( int j = 0; j < pServer->m_nMaxChannel; ++j )
						{
							sprintf( temp, "Channel %d : %4d", j+1, pServer->m_nChannelUserCount[j] );
							InsertItem( hRoot1, temp, FALSE );
						}
					}						
				}
			}
		}
	}
}

void CUserCount::OnSelchangeComboServerset() 
{
	UpdateTreeCtrl();	
}

void CUserCount::OnButtonRefresh() 
{
	SERVERSETMNG->DoQueryChannelInfo( "All Server" );	

	UpdateTreeCtrl();
}

LRESULT CUserCount::DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam) 
{
	// TODO: Add your specialized code here and/or call the base class
	
	return CDialog::DefWindowProc(message, wParam, lParam);
}

BOOL CUserCount::Create(CWnd* pParentWnd) 
{
	// TODO: Add your specialized code here and/or call the base class
	
	return CDialog::Create(IDD, pParentWnd);
}

void CUserCount::PostNcDestroy() 
{
	CMainFrame* pMainFrame = (CMainFrame*)AfxGetMainWnd();
	((CServerToolView*)pMainFrame->GetActiveView())->m_pUserCountDlg = NULL;

	delete this;
	
	CDialog::PostNcDestroy();
}

void CUserCount::OnClose() 
{
	DestroyWindow();
}

⌨️ 快捷键说明

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