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

📄 networkdlg.cpp

📁 使用HOOPS库开发的一个教学演示工具。
💻 CPP
字号:
// NetworkDlg.cpp : implementation file//#include "stdafx.h"#include "resource.h"#include "hoops.h"#include "HNetMgr.h"#include "HNet.h"#include "HUtilityLocaleString.h"#include "NetworkDlg.h"#include "hoopstest.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endif/////////////////////////////////////////////////////////////////////////////// CNetworkDlg dialogCNetworkDlg::CNetworkDlg(CWnd* pParent /*=NULL*/)	: CDialog(CNetworkDlg::IDD, pParent){	//{{AFX_DATA_INIT(CNetworkDlg)	m_nProtocolType = -1;	m_csTcpipAddress = _T("127.0.0.1");	m_csServerPort = _T("11111");	m_csSessionName = _T("");	m_csSessionPassword = _T("");	m_csServerPasswordAdmin = _T("");	m_csClientName = _T("");	m_csHttpAddress = _T("");	m_csServerPasswordAccess = _T("");	//}}AFX_DATA_INIT	m_ehConnectionStatus = ehOff;	m_pHNetMgr = 0;}CNetworkDlg::~CNetworkDlg(){	if( m_pHNetMgr )	{		delete m_pHNetMgr;		m_pHNetMgr = NULL;	}}void CNetworkDlg::DoDataExchange(CDataExchange* pDX){	CDialog::DoDataExchange(pDX);	//{{AFX_DATA_MAP(CNetworkDlg)	DDX_Control(pDX, IDC_LIST_SESSIONS, m_listSessions);	DDX_Radio(pDX, IDC_RADIO_HTTP, m_nProtocolType);	DDX_Text(pDX, IDC_EDIT_TCPIP_ADDRESS, m_csTcpipAddress);	DDX_Text(pDX, IDC_EDIT_TCPIP_SERVERPORT, m_csServerPort);	DDX_Text(pDX, IDC_EDIT_SESSIONNAME, m_csSessionName);	DDX_Text(pDX, IDC_EDIT_SESSIONPWD, m_csSessionPassword);	DDX_Text(pDX, IDC_EDIT_SERVERPWD_ADMIN, m_csServerPasswordAdmin);	DDX_Text(pDX, IDC_EDIT_CLIENTNAME, m_csClientName);	DDX_Text(pDX, IDC_EDIT_HTTP_ADDRESS, m_csHttpAddress);	DDX_Text(pDX, IDC_EDIT_SERVERPWD_ACCESS, m_csServerPasswordAccess);	//}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP(CNetworkDlg, CDialog)	//{{AFX_MSG_MAP(CNetworkDlg)	ON_BN_CLICKED(IDC_RADIO_HTTP, OnRadioHttp)	ON_BN_CLICKED(IDC_RADIO_TCPIP, OnRadioTcpip)	ON_BN_CLICKED(IDC_BUTTON_CONNECT, OnButtonConnect)	ON_BN_CLICKED(ID_BUTTON_CREATESESSION, OnButtonCreatesession)	ON_BN_CLICKED(ID_BUTTON_DELETESESSION, OnButtonDeletesession)	ON_BN_CLICKED(ID_BUTTON_REFRESHSESSION, OnButtonRefreshsession)	ON_BN_CLICKED(ID_BUTTON_JOINSESSION, OnButtonJoinsession)	ON_LBN_SELCHANGE(IDC_LIST_SESSIONS, OnSelchangeListSessions)	ON_WM_CLOSE()	//}}AFX_MSG_MAPEND_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////// CNetworkDlg message handlersBOOL CNetworkDlg::OnInitDialog() {	CDialog::OnInitDialog();	// first let's create a HNetMgr object 	m_pHNetMgr = new HNetMgr(); 	// set to TCP/IP by default	switch_protocol( ehTcpip );	// disable all the session controls till a connection is established	switch_session_controls( FALSE );	UpdateData(FALSE);		return TRUE;  // return TRUE unless you set the focus to a control	              // EXCEPTION: OCX Property Pages should return FALSE}void CNetworkDlg::OnRadioHttp() {	switch_protocol( ehHttp );}void CNetworkDlg::OnRadioTcpip() {	switch_protocol( ehTcpip );}void CNetworkDlg::OnButtonConnect() {	UpdateData(TRUE);	if( m_ehConnectionStatus == ehOn )		switch_connection( ehOff );	else if( m_ehConnectionStatus == ehOff )		switch_connection( ehOn );	else		assert(0);}void CNetworkDlg::OnButtonCreatesession() {	UpdateData(TRUE);	if( m_csClientName.IsEmpty() )	{		if(!m_pHNetMgr->CreateSession(H_ASCII_TEXT(m_csSessionName), 									  H_ASCII_TEXT(m_csSessionPassword),									  H_ASCII_TEXT(m_csServerPasswordAdmin)))			AfxMessageBox(_T("Unable to create session"));	} 	else 	{		HNetClient* client  = m_pHNetMgr->CreateSessionAndClient( 										H_ASCII_TEXT(m_csSessionName), H_ASCII_TEXT(m_csSessionPassword), 										H_ASCII_TEXT(m_csServerPasswordAdmin), H_ASCII_TEXT(m_csClientName) );			if(client)			{				refresh_sessions_list();				//HQNetworkClientDlg * client_dlg = new HQNetworkClientDlg(this, client->GetName(), client);				//EmitNewNetClient(client_dlg);			}			else				AfxMessageBox(_T("Unable to create session"));	}}void CNetworkDlg::OnButtonDeletesession() {	if( m_csSessionName.IsEmpty() )	{		AfxMessageBox(_T("No sessions selected. Please select one and try again"));		return;	}	if( !m_pHNetMgr->DeleteSession(	H_ASCII_TEXT(m_csSessionName), 									H_ASCII_TEXT(m_csSessionPassword), 									H_ASCII_TEXT(m_csServerPasswordAdmin)))	{		assert(0);		AfxMessageBox(_T("Failed to delete the session"));		return;	}	refresh_sessions_list();}void CNetworkDlg::OnButtonRefreshsession() {	refresh_sessions_list();}void CNetworkDlg::OnButtonJoinsession() {	// first sync our dialog data members with whatever user might have input 	UpdateData(TRUE);	if( m_csSessionName.IsEmpty() )	{		AfxMessageBox(_T("No sessions selected. Please select one and try again"));		return;	}	// check if there is client name entered	if( m_csClientName.IsEmpty() == TRUE )	{		AfxMessageBox(_T("No client name entered. Please enter client name and try again"));		return;	}	HNetClient * pClient = m_pHNetMgr->JoinSession( 										H_ASCII_TEXT(m_csSessionName), 										H_ASCII_TEXT(m_csSessionPassword),										H_ASCII_TEXT(m_csClientName) );	if(!pClient)	{		AfxMessageBox(_T("Unable to join session"));		return;	}}void CNetworkDlg::OnSelchangeListSessions() {	// get the current selection 	int cur_sel = m_listSessions.GetCurSel();	m_listSessions.GetText(cur_sel, m_csSessionName);	// set the text of session name in the dialog	SetDlgItemText(IDC_EDIT_SESSIONNAME, m_csSessionName);}void CNetworkDlg::refresh_sessions_list(){	m_listSessions.ResetContent();	m_pHNetMgr->GetSessionsList( &m_listSessions );}bool CNetworkDlg::switch_protocol( HProtocolType ehType ){	if( ehType == ehHttp && m_nProtocolType != ehHttp )	{		m_nProtocolType = ehHttp;		switch_http_controls(TRUE);		switch_tcpip_controls(FALSE);	}	else if( ehType == ehTcpip && m_nProtocolType != ehTcpip )	{		m_nProtocolType = ehTcpip;		switch_http_controls(FALSE);		switch_tcpip_controls(TRUE);	}	return true;}void CNetworkDlg::switch_tcpip_controls(BOOL bState){	CWnd* p_tcp_addr	= 	GetDlgItem(IDC_EDIT_TCPIP_ADDRESS);	if( p_tcp_addr )		p_tcp_addr->EnableWindow(bState);}void CNetworkDlg::switch_http_controls(BOOL bState){	CWnd* p_http_addr	= 	GetDlgItem(IDC_EDIT_HTTP_ADDRESS);	if( p_http_addr	)		p_http_addr->EnableWindow(bState);}bool CNetworkDlg::switch_connection( HConnectionState ehStatus ){	if( ehStatus == ehOn && m_ehConnectionStatus != ehOn )	{		// now let's connect this HNet object to our active server 		// Note: a connection will not be made unless both the password  		// and server port match what was in the hnet_server.conf file 		bool connect_stat = false;		if( m_nProtocolType == ehHttp )			connect_stat = m_pHNetMgr->ConnectToServer( H_ASCII_TEXT(m_csHttpAddress), 														H_ASCII_TEXT(m_csServerPort), 														H_ASCII_TEXT(m_csServerPasswordAccess));		else			connect_stat = m_pHNetMgr->ConnectToServer( H_ASCII_TEXT(m_csTcpipAddress), 														H_ASCII_TEXT(m_csServerPort), 														H_ASCII_TEXT(m_csServerPasswordAccess));		if( !connect_stat )		{			AfxMessageBox(_T("Unable to connect to server"));			return false;		}		m_ehConnectionStatus = ehOn;		// change the "Connect" button label to "Disconnect"		SetDlgItemText( IDC_BUTTON_CONNECT, _T("Disconnect") );		// enable all the session controls		switch_session_controls( TRUE );		refresh_sessions_list();	}	else if( ehStatus == ehOff && m_ehConnectionStatus != ehOff )	{		// disconnect here		m_pHNetMgr->DisconnectFromServer();		// change the "Disconnect" button label to "Connect"		SetDlgItemText( IDC_BUTTON_CONNECT, _T("Connect") );		// disable all the session controls		switch_session_controls( FALSE );		m_ehConnectionStatus = ehOff;	}	else	{		assert(0);		return false;	}	return true;}void CNetworkDlg::switch_session_controls(BOOL bState){	CWnd* pCtrl = GetDlgItem(IDC_EDIT_SESSIONNAME);	if( pCtrl )		pCtrl->EnableWindow(bState);	pCtrl = GetDlgItem(IDC_EDIT_SESSIONPWD);	if( pCtrl )		pCtrl->EnableWindow(bState);	pCtrl = GetDlgItem(IDC_EDIT_CLIENTNAME);	if( pCtrl )		pCtrl->EnableWindow(bState);	pCtrl = GetDlgItem(IDC_LIST_SESSIONS);	if( pCtrl )		pCtrl->EnableWindow(bState);	pCtrl = GetDlgItem(ID_BUTTON_CREATESESSION);	if( pCtrl )		pCtrl->EnableWindow(bState);	pCtrl = GetDlgItem(ID_BUTTON_DELETESESSION);	if( pCtrl )		pCtrl->EnableWindow(bState);	pCtrl = GetDlgItem(ID_BUTTON_JOINSESSION);	if( pCtrl )		pCtrl->EnableWindow(bState);	pCtrl = GetDlgItem(ID_BUTTON_REFRESHSESSION);	if( pCtrl )		pCtrl->EnableWindow(bState);}void CNetworkDlg::OnClose() {	// just hide this dialog, it will be destroyed by the application	ShowWindow(SW_HIDE);//	CDialog::OnClose();}

⌨️ 快捷键说明

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