|
|
#include "ClusterConnectIndirectPage.h"
#include "LeftView.h"
#include "CommonUtils.h"
#include "CommonNLB.h"
#include "MWmiError.h"
#include "IpSubnetMaskControl.h"
#include "MIPAddress.h"
#include "ResourceString.h"
BEGIN_MESSAGE_MAP( ClusterConnectIndirectPage, CPropertyPage )
ON_BN_CLICKED(IDC_ADD_MACHINE, OnButtonAdd) ON_BN_CLICKED(IDC_DEL_MACHINE, OnButtonDel) ON_WM_HELPINFO() ON_WM_CONTEXTMENU()
END_MESSAGE_MAP()
ClusterConnectIndirectPage::ClusterConnectIndirectPage( ClusterData* clusterData, CWnd* parent ) : CPropertyPage( IDD ), DataSinkI(), m_clusterData( clusterData ), myParent( parent ), dataStore(L" ") {}
void ClusterConnectIndirectPage::DoDataExchange( CDataExchange* pDX ) { CPropertyPage::DoDataExchange( pDX );
DDX_Control( pDX, IDC_CLUSTER_IP, clusterIP); DDX_Control( pDX, IDC_MACHINE, machineIP ); DDX_Control( pDX, IDC_MACHINE_IP_LIST, machineIPList ); DDX_Control( pDX, IDC_ADD_MACHINE, addButton ); DDX_Control( pDX, IDC_DEL_MACHINE, removeButton );
DDX_Control( pDX, IDC_CLUSTER_CONNECTION_STATUS, connectionStatus ); }
void ClusterConnectIndirectPage::OnOK() { CPropertyPage::OnOK(); }
BOOL ClusterConnectIndirectPage::OnKillActive() { // clear the old status if any.
dataStore = L" ";
// get cluster ip.
//
_bstr_t clusterIPAddress = CommonUtils::getCIPAddressCtrlString( clusterIP );
// validate this ip.
bool isIPValid = MIPAddress::checkIfValid( clusterIPAddress ); if( isIPValid == false ) { // invalid ip.
dataSink( GETRESOURCEIDSTRING( IDS_WARNING_IP_INVALID ) + clusterIPAddress );
CPropertyPage::OnCancel(); return 0; }
// check if this cluster already exists in view.
if( myParent != 0 ) { bool isClusterDuplicate = ( (LeftView * )myParent)->doesClusterExistInView( clusterIPAddress ); if( isClusterDuplicate == true ) { dataSink( clusterIPAddress + L":" + GETRESOURCEIDSTRING (IDS_CLUSTER_ALREADY ) );
CPropertyPage::OnCancel(); return 0; } }
// get all the ips in the machine ip list.
// this list should not be empty.
if( machineIPList.GetCount() == 0 ) { // machine ip list is empty
dataSink( GETRESOURCEIDSTRING (IDS_MACHINE_LIST_EMPTY ) );
CPropertyPage::OnCancel(); return 0; }
wchar_t ipBuf[1000]; vector<_bstr_t> connectionIPS;
for( int i = 0; i < machineIPList.GetCount(); ++i ) { machineIPList.GetText( i, ipBuf ); connectionIPS.push_back( ipBuf ); }
try {
#if 1
CommonNLB::connectToClusterIndirect( clusterIPAddress, connectionIPS, m_clusterData, this ); #else
vector<ClusterData> clusterDataStore; bool clusterPropertiesMatched;
CommonNLB::connectToClusterIndirectNew( clusterIPAddress, connectionIPS, &clusterDataStore, clusterPropertiesMatched, this );
*(m_clusterData) = clusterDataStore[0];
#endif
} catch( _com_error e ) { _bstr_t errText; GetErrorCodeText( e.Error(), errText ); dataSink( errText );
CPropertyPage::OnCancel(); return 0; }
return CPropertyPage::OnKillActive(); }
BOOL ClusterConnectIndirectPage::OnInitDialog() { CPropertyPage::OnInitDialog();
// fill in cluster ip but only if not null.
//
if( m_clusterData->cp.cIP != _bstr_t( L"0.0.0.0" ) ) { CommonUtils::fillCIPAddressCtrlString( clusterIP, m_clusterData->cp.cIP );
// fill in machine ip list.
// connect to each host.
map<_bstr_t, HostData >::iterator top;
for( top = m_clusterData->hosts.begin(); top != m_clusterData->hosts.end(); ++top ) { machineIPList.InsertString( -1, (*top).second.connectionIP ); }
// select the first ip in machine IP list.
machineIPList.SetCurSel( 0 ); } return TRUE; }
void ClusterConnectIndirectPage::dataSink( _bstr_t data ) { dataStore += data; dataStore += L"\r\n";
connectionStatus.SetWindowText( dataStore ); UpdateWindow(); }
void ClusterConnectIndirectPage::OnButtonAdd() { // get and check if machine ip is valid.
_bstr_t machineIPAddress = CommonUtils::getCIPAddressCtrlString( machineIP );
bool isIPValid = MIPAddress::checkIfValid( machineIPAddress ); if( isIPValid == false ) { // invalid ip.
dataSink( GETRESOURCEIDSTRING( IDS_WARNING_IP_INVALID ) + machineIPAddress ); return; }
// check if machine ip to add already exists in list.
//
wchar_t ipBuf[1000]; for( int i = 0; i < machineIPList.GetCount(); ++i ) { machineIPList.GetText( i, ipBuf ); if( machineIPAddress == _bstr_t( ipBuf ) ) { // duplicate, cannot add.
dataSink( GETRESOURCEIDSTRING( IDS_MACHINE_ALREADY ) + L":" + machineIPAddress );
// select this duplicate string in list.
machineIPList.SetCurSel( i );
return; } }
// add it to list.
int index = machineIPList.InsertString( -1, machineIPAddress );
// select this string.
machineIPList.SetCurSel( index );
}
void ClusterConnectIndirectPage::OnButtonDel() { // delete the ip selected from the list.
int index = machineIPList.GetCurSel(); if( index != LB_ERR ) { machineIPList.DeleteString( index ); } }
BOOL ClusterConnectIndirectPage::OnHelpInfo (HELPINFO* helpInfo ) { if( helpInfo->iContextType == HELPINFO_WINDOW ) { ::WinHelp( static_cast<HWND> ( helpInfo->hItemHandle ), CVY_CTXT_HELP_FILE, HELP_WM_HELP, (ULONG_PTR ) g_aHelpIDs_IDD_CLUSTER_CONNECT_INDIRECT_PAGE); }
return TRUE; }
void ClusterConnectIndirectPage::OnContextMenu( CWnd* pWnd, CPoint point ) { ::WinHelp( m_hWnd, CVY_CTXT_HELP_FILE, HELP_CONTEXTMENU, (ULONG_PTR ) g_aHelpIDs_IDD_CLUSTER_CONNECT_INDIRECT_PAGE);
}
|