101 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			101 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
// Copyright (c) 1997-2001 Microsoft Corporation, All Rights Reserved
 | 
						|
#include "precomp.h"
 | 
						|
#include "Consumer.h"
 | 
						|
#include <objbase.h>
 | 
						|
#include "Container.h"
 | 
						|
#include "resource.h"		// main symbols
 | 
						|
 | 
						|
extern CContainerApp theApp;
 | 
						|
 | 
						|
CConsumer::CConsumer()
 | 
						|
{
 | 
						|
	m_cRef = 0L;
 | 
						|
	m_EventList = NULL;
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
CConsumer::~CConsumer()
 | 
						|
{
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
STDMETHODIMP CConsumer::QueryInterface(REFIID riid, LPVOID FAR *ppv)
 | 
						|
{
 | 
						|
    *ppv=NULL;
 | 
						|
 | 
						|
    if (riid == IID_IUnknown || riid == IID_IWbemUnboundObjectSink)
 | 
						|
        *ppv=this;
 | 
						|
 | 
						|
    if (*ppv != NULL)
 | 
						|
    {
 | 
						|
        ((LPUNKNOWN)*ppv)->AddRef();
 | 
						|
        return NOERROR;
 | 
						|
    }
 | 
						|
 | 
						|
    return E_NOINTERFACE;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
STDMETHODIMP_(ULONG) CConsumer::AddRef(void)
 | 
						|
{
 | 
						|
    TRACE(_T("add consumer %d\n"), m_cRef);
 | 
						|
    return ++m_cRef;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
STDMETHODIMP_(ULONG) CConsumer::Release(void)
 | 
						|
{
 | 
						|
    if (--m_cRef != 0L)
 | 
						|
        return m_cRef;
 | 
						|
 | 
						|
    TRACE(_T("consumer %d\n"), m_cRef);
 | 
						|
 | 
						|
    theApp.m_pConsumer = NULL;
 | 
						|
	theApp.EvalQuitApp();
 | 
						|
    delete this;
 | 
						|
    return 0L;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
STDMETHODIMP CConsumer::IndicateToConsumer(IWbemClassObject *pLogicalConsumer,
 | 
						|
											long lNumObjects,
 | 
						|
											IWbemClassObject **ppObjects)
 | 
						|
{
 | 
						|
	CContainerDlg *pDlg = NULL;
 | 
						|
	CEventList *pEventList = NULL;
 | 
						|
 | 
						|
	TRACE(_T("Indicate() called\n"));
 | 
						|
 | 
						|
	// see if I should 'simulate' launching me.
 | 
						|
	theApp.EvalStartApp();
 | 
						|
 | 
						|
	// grab some convenient ptrs into the dlg.
 | 
						|
	CContainerApp *winApp = (CContainerApp *)AfxGetApp();
 | 
						|
	if(winApp)
 | 
						|
	{
 | 
						|
		pDlg = (CContainerDlg *)winApp->m_pMainWnd;
 | 
						|
 | 
						|
		if(pDlg)
 | 
						|
		{
 | 
						|
			pEventList = &pDlg->m_EventList;
 | 
						|
			if(pEventList)
 | 
						|
			{
 | 
						|
				// walk though the classObjects...
 | 
						|
				for(int i = 0; i < lNumObjects; i++)
 | 
						|
				{
 | 
						|
					// output the buffer.
 | 
						|
					pEventList->AddWbemEvent(pLogicalConsumer,
 | 
						|
												ppObjects[i]);
 | 
						|
 | 
						|
					// are there REALLY events in there now?
 | 
						|
					pDlg->UpdateCounter();
 | 
						|
 | 
						|
				} // endfor
 | 
						|
			}
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	return S_OK;
 | 
						|
}
 |