📄 networkdlg.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 + -