|
|
// Factory.cpp: implementation of the CFactory class.
//
//////////////////////////////////////////////////////////////////////
#include "hmagent.h"
#include "consumer.h"
#include "system.h"
#include "evtprov.h"
#include "instprov.h"
#include "methprov.h"
#include "factory.h"
#include "Provider.h"
extern long g_cComponents; extern long g_cServerLocks; //extern CSystem* g_pSystem;
//extern HANDLE g_hEvtReady;
//////////////////////////////////////////////////////////////////////
// CHealthMonFactory - Base Class Factory
//////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CBaseFactory::CBaseFactory() { m_cRef = 0L; }
CBaseFactory::~CBaseFactory() { }
//////////////////////////////////////////////////////////////////////
// Query Interface
//////////////////////////////////////////////////////////////////////
STDMETHODIMP CBaseFactory::QueryInterface(REFIID riid, LPVOID* ppv) { *ppv=NULL;
if (IID_IUnknown==riid || IID_IClassFactory==riid) { *ppv=this; AddRef(); return S_OK; }
return E_NOINTERFACE; }
//////////////////////////////////////////////////////////////////////
// AddRef/Release()
//////////////////////////////////////////////////////////////////////
STDMETHODIMP_(ULONG) CBaseFactory::AddRef(void) { return InterlockedIncrement((long*)&m_cRef); }
STDMETHODIMP_(ULONG) CBaseFactory::Release(void) { ULONG ulNewCount = InterlockedDecrement((long *)&m_cRef); if (0L == ulNewCount) { delete this; } return ulNewCount; }
//////////////////////////////////////////////////////////////////////
// Create Instance
//////////////////////////////////////////////////////////////////////
STDMETHODIMP CBaseFactory::CreateInstance(LPUNKNOWN pUnkOuter, REFIID riid, LPVOID* ppObj) { *ppObj = NULL;
if (NULL != pUnkOuter) { return CLASS_E_NOAGGREGATION; }
return S_OK; }
//////////////////////////////////////////////////////////////////////
// Lock Server
//////////////////////////////////////////////////////////////////////
STDMETHODIMP CBaseFactory::LockServer(BOOL fLock) { if (fLock) { InterlockedIncrement((LONG *) &g_cServerLocks); } else { InterlockedDecrement((LONG *) &g_cServerLocks); }
return S_OK; }
//////////////////////////////////////////////////////////////////////
// Class Factory for Consumer (original agent)
// Create instance of CConsumer
//////////////////////////////////////////////////////////////////////
STDMETHODIMP CConsFactory::CreateInstance(IUnknown *pUnkOuter, REFIID riid, LPVOID *ppv) { HRESULT hr; CProvider *pProvider = NULL;
if (pUnkOuter) { return E_FAIL; }
pProvider = new CProvider();
if (pProvider == NULL) { *ppv = NULL; return E_OUTOFMEMORY; }
if (pProvider) { hr = pProvider->QueryInterface(riid, ppv); MY_HRESASSERT(hr); } return NOERROR; }
//////////////////////////////////////////////////////////////////////
// Class Factory for Event Providers
// Create instance of CBaseEventprovider
//////////////////////////////////////////////////////////////////////
STDMETHODIMP CSystemEvtProvFactory::CreateInstance(LPUNKNOWN pUnkOuter, REFIID riid, LPVOID* ppObj) { *ppObj = NULL;
if (NULL != pUnkOuter) { return CLASS_E_NOAGGREGATION; }
CSystemEventProvider* pProvider = new CSystemEventProvider();
if (!pProvider) { return E_OUTOFMEMORY; }
HRESULT hr = pProvider->QueryInterface(riid, ppObj); MY_HRESASSERT(hr);
return hr; }
STDMETHODIMP CDataGroupEvtProvFactory::CreateInstance(LPUNKNOWN pUnkOuter, REFIID riid, LPVOID* ppObj) { *ppObj = NULL;
if (NULL != pUnkOuter) { return CLASS_E_NOAGGREGATION; }
CDataGroupEventProvider* pProvider = new CDataGroupEventProvider;
if (!pProvider) { return E_OUTOFMEMORY; }
HRESULT hr = pProvider->QueryInterface(riid, ppObj); MY_HRESASSERT(hr);
return hr; }
STDMETHODIMP CDataCollectorEvtProvFactory::CreateInstance(LPUNKNOWN pUnkOuter, REFIID riid, LPVOID* ppObj) { *ppObj = NULL;
if (NULL != pUnkOuter) { return CLASS_E_NOAGGREGATION; }
CDataCollectorEventProvider* pProvider = new CDataCollectorEventProvider;
if (!pProvider) { return E_OUTOFMEMORY; }
HRESULT hr = pProvider->QueryInterface(riid, ppObj); MY_HRESASSERT(hr);
return hr; }
STDMETHODIMP CDataCollectorPerInstanceEvtProvFactory::CreateInstance(LPUNKNOWN pUnkOuter, REFIID riid, LPVOID* ppObj) { *ppObj = NULL;
if (NULL != pUnkOuter) { return CLASS_E_NOAGGREGATION; }
CDataCollectorPerInstanceEventProvider* pProvider = new CDataCollectorPerInstanceEventProvider;
if (!pProvider) { return E_OUTOFMEMORY; }
HRESULT hr = pProvider->QueryInterface(riid, ppObj); MY_HRESASSERT(hr);
return hr; }
STDMETHODIMP CThresholdEvtProvFactory::CreateInstance(LPUNKNOWN pUnkOuter, REFIID riid, LPVOID* ppObj) { *ppObj = NULL;
if (NULL != pUnkOuter) { return CLASS_E_NOAGGREGATION; }
CThresholdEventProvider* pProvider = new CThresholdEventProvider;
if (!pProvider) { return E_OUTOFMEMORY; }
HRESULT hr = pProvider->QueryInterface(riid, ppObj); MY_HRESASSERT(hr);
return hr; }
STDMETHODIMP CActionEvtProvFactory::CreateInstance(LPUNKNOWN pUnkOuter, REFIID riid, LPVOID* ppObj) { *ppObj = NULL;
if (NULL != pUnkOuter) { return CLASS_E_NOAGGREGATION; }
CActionEventProvider* pProvider = new CActionEventProvider;
if (!pProvider) { return E_OUTOFMEMORY; }
HRESULT hr = pProvider->QueryInterface(riid, ppObj); MY_HRESASSERT(hr);
return hr; }
STDMETHODIMP CActionTriggerEvtProvFactory::CreateInstance(LPUNKNOWN pUnkOuter, REFIID riid, LPVOID* ppObj) { *ppObj = NULL;
if (NULL != pUnkOuter) { return CLASS_E_NOAGGREGATION; }
CActionTriggerEventProvider* pProvider = new CActionTriggerEventProvider;
if (!pProvider) { return E_OUTOFMEMORY; }
HRESULT hr = pProvider->QueryInterface(riid, ppObj); MY_HRESASSERT(hr);
return hr; }
//////////////////////////////////////////////////////////////////////
// Class Factory for Instance Provider.
// Create instance of CBaseInstanceProvider
//////////////////////////////////////////////////////////////////////
STDMETHODIMP CInstProvFactory::CreateInstance(LPUNKNOWN pUnkOuter, REFIID riid, LPVOID* ppObj) { *ppObj = NULL;
if (NULL != pUnkOuter) { return CLASS_E_NOAGGREGATION; }
CBaseInstanceProvider* pProvider = new CBaseInstanceProvider;
if (!pProvider) { return E_OUTOFMEMORY; }
HRESULT hr = pProvider->QueryInterface(riid, ppObj); MY_HRESASSERT(hr);
return hr; }
//////////////////////////////////////////////////////////////////////
// Class Factory for Method Provider.
// Create instance of CCMethProvFactory
//////////////////////////////////////////////////////////////////////
STDMETHODIMP CMethProvFactory::CreateInstance(LPUNKNOWN pUnkOuter, REFIID riid, LPVOID* ppObj) { *ppObj = NULL;
if (NULL != pUnkOuter) return CLASS_E_NOAGGREGATION;
CBaseMethodProvider* pProvider = new CBaseMethodProvider;
if (!pProvider) { return E_OUTOFMEMORY; }
HRESULT hr = pProvider->QueryInterface(riid, ppObj); MY_HRESASSERT(hr);
return hr; }
#ifdef SAVE
STDMETHODIMP CDataCollectorStatisticsEvtProvFactory::CreateInstance(LPUNKNOWN pUnkOuter, REFIID riid, LPVOID* ppObj) { *ppObj = NULL;
if (NULL != pUnkOuter) { return CLASS_E_NOAGGREGATION; }
CDataCollectorStatisticsEventProvider* pProvider = new CDataCollectorStatisticsEventProvider;
if (!pProvider) { return E_OUTOFMEMORY; }
HRESULT hr = pProvider->QueryInterface(riid, ppObj); MY_HRESASSERT(hr);
return hr; } #endif
#ifdef SAVE
STDMETHODIMP CThresholdInstanceEvtProvFactory::CreateInstance(LPUNKNOWN pUnkOuter, REFIID riid, LPVOID* ppObj) { *ppObj = NULL;
if (NULL != pUnkOuter) return CLASS_E_NOAGGREGATION;
//ZZZMY_OUTPUT(L"BLOCK - BLOCK CThresholdInstanceEvtProvFactory::CreateInstance BLOCK - g_hEvtReady BLOCK WAIT", 1);
//ZZZ if (WaitForSingleObject(g_hEvtReady, 0) != WAIT_OBJECT_0 || g_pSystem == NULL)
//ZZZ {
//ZZZMY_OUTPUT(L"BLOCK - BLOCK CThresholdInstanceEvtProvFactory::CreateInstance BLOCK - g_hEvtReady BLOCK NOT READY", 1);
//ZZZ return E_FAIL;
//ZZZ }
//ZZZMY_OUTPUT(L"BLOCK - BLOCK CThresholdInstanceEvtProvFactory::CreateInstance BLOCK - g_hEvtReady BLOCK READY", 1);
// MY_ASSERT(g_pSystem);
CThresholdInstanceEventProvider* pProvider = new CThresholdInstanceEventProvider;
if (!pProvider) return E_OUTOFMEMORY;
HRESULT hr = pProvider->QueryInterface(riid, ppObj); MY_HRESASSERT(hr);
return hr; } #endif
|