#include <atlbase.h>
extern CComModule _Module;
#include <atlcom.h>

#include "CAO.h"

class CEventSink :
	public CComObjectRootEx<CComSingleThreadModel>,
	public IDispEventImpl<0, CEventSink, &DIID__ICaoControllerEvents, &LIBID_CAOLib, 1, 0>
{
public:
	CEventSink(){}

BEGIN_COM_MAP(CEventSink)
	COM_INTERFACE_ENTRY_IID(DIID__ICaoControllerEvents, CEventSink)
END_COM_MAP()

BEGIN_SINK_MAP(CEventSink)
	SINK_ENTRY_EX(0, DIID__ICaoControllerEvents, 1, OnMessage)
END_SINK_MAP()

	STDMETHODIMP OnMessage(IUnknown* pIMessage)
	{
		USES_CONVERSION;
		CComVariant vntVal;
		CComPtr<ICaoMessage> pMsg;
		HRESULT hr = pIMessage->QueryInterface(IID_ICaoMessage, (void**)&pMsg);
		hr = pMsg->get_Value(&vntVal);
		if (SUCCEEDED(hr) && vntVal.vt == VT_BSTR) {
			AfxTrace("* OnMessage : %s\n", W2A(vntVal.bstrVal));
		}
		return hr;
	}
};
