330 lines
10 KiB
C
330 lines
10 KiB
C
|
//////////////////////////////////////////////////////////////////////////////
|
||
|
//
|
||
|
// Copyright (c) 2000-2001 Microsoft Corporation
|
||
|
//
|
||
|
// Module Name:
|
||
|
// CBCAInterface.h
|
||
|
//
|
||
|
// Description:
|
||
|
// This file contains the declaration of the CBCAInterface
|
||
|
// class. This class implements the IClusCfgBaseCluster interface.
|
||
|
//
|
||
|
// Documentation:
|
||
|
// TODO: fill in pointer to external documentation
|
||
|
//
|
||
|
// Implementation Files:
|
||
|
// CBCAInterface.cpp
|
||
|
//
|
||
|
// Maintained By:
|
||
|
// Vij Vasu (VVasu) 07-MAR-2000
|
||
|
//
|
||
|
//////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
|
||
|
// Make sure that this file is included only once per compile path.
|
||
|
#pragma once
|
||
|
|
||
|
|
||
|
//////////////////////////////////////////////////////////////////////////////
|
||
|
// Include Files
|
||
|
//////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
// For IUnknown
|
||
|
#include <unknwn.h>
|
||
|
|
||
|
// For IClusCfgBaseCluster
|
||
|
// For IClusCfgInitialize
|
||
|
// For IClusCfgCallback
|
||
|
#include "ClusCfgServer.h"
|
||
|
#include "ClusCfgPrivate.h"
|
||
|
|
||
|
// For CSmartIfacePtr
|
||
|
#include "SmartClasses.h"
|
||
|
|
||
|
// For the a few common types and definitions
|
||
|
#include "CommonDefs.h"
|
||
|
|
||
|
// For the CStr class
|
||
|
#include "CStr.h"
|
||
|
|
||
|
// For the CList class
|
||
|
#include "CList.h"
|
||
|
|
||
|
|
||
|
//////////////////////////////////////////////////////////////////////////
|
||
|
// Forward declarations.
|
||
|
//////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
class CBaseClusterAction;
|
||
|
class CException;
|
||
|
class CExceptionWithString;
|
||
|
class CAssert;
|
||
|
|
||
|
|
||
|
//////////////////////////////////////////////////////////////////////////////
|
||
|
//++
|
||
|
//
|
||
|
// class CBCAInterface
|
||
|
//
|
||
|
// Description:
|
||
|
// This class implements the IClusCfgBaseCluster interface.
|
||
|
//
|
||
|
//--
|
||
|
//////////////////////////////////////////////////////////////////////////////
|
||
|
class CBCAInterface
|
||
|
: public IClusCfgBaseCluster
|
||
|
, public IClusCfgInitialize
|
||
|
{
|
||
|
public:
|
||
|
//////////////////////////////////////////////////////////////////////////
|
||
|
// IUnknown methods
|
||
|
//////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
STDMETHOD( QueryInterface )( REFIID riidIn, void ** ppvOut );
|
||
|
STDMETHOD_( ULONG, AddRef )( void );
|
||
|
STDMETHOD_( ULONG, Release )( void );
|
||
|
|
||
|
|
||
|
//////////////////////////////////////////////////////////////////////////
|
||
|
// IClusCfgBaseCluster methods
|
||
|
//////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
// Indicate that a cluster is to be formed.
|
||
|
STDMETHOD( SetForm )(
|
||
|
const WCHAR * pcszClusterNameIn
|
||
|
, const WCHAR * pcszClusterBindingStringIn
|
||
|
, const WCHAR * pcszClusterAccountNameIn
|
||
|
, const WCHAR * pcszClusterAccountPwdIn
|
||
|
, const WCHAR * pcszClusterAccountDomainIn
|
||
|
, const DWORD dwClusterIPAddressIn
|
||
|
, const DWORD dwClusterIPSubnetMaskIn
|
||
|
, const WCHAR * pcszClusterIPNetworkIn
|
||
|
);
|
||
|
|
||
|
// Indicate that this node should be added to a cluster.
|
||
|
STDMETHOD( SetJoin )(
|
||
|
const WCHAR * pcszClusterNameIn
|
||
|
, const WCHAR * pcszClusterBindingStringIn
|
||
|
, const WCHAR * pcszClusterAccountNameIn
|
||
|
, const WCHAR * pcszClusterAccountPwdIn
|
||
|
, const WCHAR * pcszClusterAccountDomainIn
|
||
|
);
|
||
|
|
||
|
// Indicate that this node needs to be cleaned up.
|
||
|
STDMETHOD( SetCleanup )( void );
|
||
|
|
||
|
// Commit the action desired.
|
||
|
STDMETHOD( Commit )( void );
|
||
|
|
||
|
// Rollback the committed action.
|
||
|
STDMETHOD( Rollback )( void );
|
||
|
|
||
|
|
||
|
//////////////////////////////////////////////////////////////////////////
|
||
|
// IClusCfgInitialize methods
|
||
|
//////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
// Initialize this object.
|
||
|
STDMETHOD( Initialize )(
|
||
|
IUnknown * punkCallbackIn
|
||
|
, LCID lcidIn
|
||
|
);
|
||
|
|
||
|
|
||
|
//////////////////////////////////////////////////////////////////////////
|
||
|
// Other public methods
|
||
|
//////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
// Create an instance of this class.
|
||
|
static HRESULT
|
||
|
S_HrCreateInstance( IUnknown ** ppunkOut );
|
||
|
|
||
|
// Send progress notification [ string id overload ]
|
||
|
void
|
||
|
SendStatusReport(
|
||
|
const CLSID & clsidTaskMajorIn
|
||
|
, const CLSID & clsidTaskMinorIn
|
||
|
, ULONG ulMinIn
|
||
|
, ULONG ulMaxIn
|
||
|
, ULONG ulCurrentIn
|
||
|
, HRESULT hrStatusIn
|
||
|
, UINT uiDescriptionStringIdIn
|
||
|
, bool fIsAbortAllowedIn = true
|
||
|
);
|
||
|
|
||
|
// Send progress notification [ string overload ]
|
||
|
void
|
||
|
SendStatusReport(
|
||
|
const CLSID & clsidTaskMajorIn
|
||
|
, const CLSID & clsidTaskMinorIn
|
||
|
, ULONG ulMinIn
|
||
|
, ULONG ulMaxIn
|
||
|
, ULONG ulCurrentIn
|
||
|
, HRESULT hrStatusIn
|
||
|
, const WCHAR * pcszDescriptionStringIn
|
||
|
, bool fIsAbortAllowedIn = true
|
||
|
);
|
||
|
|
||
|
// Queue a status report to be sent when an exception is caught.
|
||
|
void
|
||
|
QueueStatusReportCompletion(
|
||
|
const CLSID & clsidTaskMajorIn
|
||
|
, const CLSID & clsidTaskMinorIn
|
||
|
, ULONG ulMinIn
|
||
|
, ULONG ulMaxIn
|
||
|
, UINT uiDescriptionStringIdIn
|
||
|
);
|
||
|
|
||
|
// Process an exception that should be shown to the user.
|
||
|
HRESULT
|
||
|
HrProcessException( CExceptionWithString & resExceptionObjectInOut ) throw();
|
||
|
|
||
|
// Process an assert exception.
|
||
|
HRESULT
|
||
|
HrProcessException( const CAssert & rcaExceptionObjectIn ) throw();
|
||
|
|
||
|
// Process a general exception.
|
||
|
HRESULT
|
||
|
HrProcessException( const CException & rceExceptionObjectIn ) throw();
|
||
|
|
||
|
// Process an unknown exception.
|
||
|
HRESULT
|
||
|
HrProcessException( void ) throw();
|
||
|
|
||
|
|
||
|
//////////////////////////////////////////////////////////////////////////
|
||
|
// Public accessor methods
|
||
|
//////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
// Has this action been successfully committed?
|
||
|
bool
|
||
|
FIsCommitComplete() const throw() { return m_fCommitComplete; }
|
||
|
|
||
|
// Can this action be rolled back?
|
||
|
bool
|
||
|
FIsRollbackPossible() const throw() { return m_fRollbackPossible; }
|
||
|
|
||
|
// Are callbacks supported?
|
||
|
bool
|
||
|
FIsCallbackSupported() const throw() { return m_fCallbackSupported; }
|
||
|
|
||
|
|
||
|
private:
|
||
|
//////////////////////////////////////////////////////////////////////////
|
||
|
// Private types
|
||
|
//////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
// Smart pointer to a base cluster action.
|
||
|
typedef CSmartGenericPtr< CPtrTrait< CBaseClusterAction > > SmartBCAPointer;
|
||
|
|
||
|
// Structure that holds the data required to send pending status reports.
|
||
|
struct SPendingStatusReport
|
||
|
{
|
||
|
const CLSID m_clsidTaskMajor;
|
||
|
const CLSID m_clsidTaskMinor;
|
||
|
ULONG m_ulMin;
|
||
|
ULONG m_ulMax;
|
||
|
UINT m_uiDescriptionStringId;
|
||
|
|
||
|
// Constructor
|
||
|
SPendingStatusReport(
|
||
|
const CLSID & rclsidTaskMajorIn
|
||
|
, const CLSID & rclsidTaskMinorIn
|
||
|
, ULONG ulMinIn
|
||
|
, ULONG ulMaxIn
|
||
|
, UINT uiDescriptionStringIdIn
|
||
|
)
|
||
|
: m_clsidTaskMajor( rclsidTaskMajorIn )
|
||
|
, m_clsidTaskMinor( rclsidTaskMinorIn )
|
||
|
, m_ulMin( ulMinIn )
|
||
|
, m_ulMax( ulMaxIn )
|
||
|
, m_uiDescriptionStringId( uiDescriptionStringIdIn )
|
||
|
{
|
||
|
} //*** SPendingStatusReport()
|
||
|
|
||
|
}; // struct SPendingStatusReport
|
||
|
|
||
|
// List of pending status reports
|
||
|
typedef CList< SPendingStatusReport > PendingReportList;
|
||
|
|
||
|
|
||
|
//////////////////////////////////////////////////////////////////////////
|
||
|
// Private member functions
|
||
|
//////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
//
|
||
|
// Private constructors, destructor and assignment operator.
|
||
|
// All of these methods are private for two reasons:
|
||
|
// 1. Lifetimes of objects of this class are controlled by S_HrCreateInstance and Release.
|
||
|
// 2. Copying of an object of this class is prohibited.
|
||
|
//
|
||
|
|
||
|
// Default constructor.
|
||
|
CBCAInterface( void );
|
||
|
|
||
|
// Destructor.
|
||
|
~CBCAInterface( void );
|
||
|
|
||
|
// Copy constructor.
|
||
|
CBCAInterface( const CBCAInterface & );
|
||
|
|
||
|
// Assignment operator.
|
||
|
CBCAInterface & operator =( const CBCAInterface & );
|
||
|
|
||
|
|
||
|
//////////////////////////////////////////////////////////////////////////
|
||
|
// Private accessor methods
|
||
|
//////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
// Set the commit status.
|
||
|
void
|
||
|
SetCommitCompleted( bool fComplete = true ) throw() { m_fCommitComplete = fComplete; }
|
||
|
|
||
|
// Indicate if rollback is possible
|
||
|
void
|
||
|
SetRollbackPossible( bool fPossible = true ) throw() { m_fRollbackPossible = fPossible; }
|
||
|
|
||
|
// Indicate if callbacks are supported or not.
|
||
|
void
|
||
|
SetCallbackSupported( bool fSupported = true ) throw() { m_fCallbackSupported = fSupported; }
|
||
|
|
||
|
|
||
|
//////////////////////////////////////////////////////////////////////////
|
||
|
// Other private methods
|
||
|
//////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
// Send all those status reports that were supposed to be sent
|
||
|
void
|
||
|
CompletePendingStatusReports( HRESULT hrStatusIn ) throw();
|
||
|
|
||
|
|
||
|
//////////////////////////////////////////////////////////////////////////
|
||
|
// Private data
|
||
|
//////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
// Indicates if this action has been successfully committed or not.
|
||
|
bool m_fCommitComplete;
|
||
|
|
||
|
// Indicates if this action can be rolled back or not.
|
||
|
bool m_fRollbackPossible;
|
||
|
|
||
|
// Indicates if callbacks are supported or not.
|
||
|
bool m_fCallbackSupported;
|
||
|
|
||
|
// Reference count for this object.
|
||
|
LONG m_cRef;
|
||
|
|
||
|
// The locale id.
|
||
|
LCID m_lcid;
|
||
|
|
||
|
// Pointer to the action to be performed during Commit()
|
||
|
SmartBCAPointer m_spbcaCurrentAction;
|
||
|
|
||
|
// Pointer to the synchronous callback interface.
|
||
|
CSmartIfacePtr< IClusCfgCallback > m_spcbCallback;
|
||
|
|
||
|
// List of status reports that need to be send when an exception is caught.
|
||
|
PendingReportList m_prlPendingReportList;
|
||
|
|
||
|
}; //*** class CBCAInterface
|