#ifndef __NmCall_h__ #define __NmCall_h__ #include "NetMeeting.h" #include "SDKInternal.h" class CCall; class CNmManagerObj; ///////////////////////////////////////////////////////////////////////////// // CNmCallObj class ATL_NO_VTABLE CNmCallObj : public CComObjectRootEx, public IConnectionPointContainerImpl, public IConnectionPointImpl, public INmCall, public INmCallNotify2, public IInternalCallObj { friend HRESULT CreateEnumNmCall(IEnumNmCall** ppEnum); protected: // data static CSimpleArray* ms_pCallObjList; NM_CALL_STATE m_State; CComPtr m_spConference; CComPtr m_spInternalINmCall; DWORD m_dwInteralINmCallAdvise; CNmManagerObj* m_pNmManagerObj; public: static HRESULT InitSDK(); static void CleanupSDK(); DECLARE_NO_REGISTRY() DECLARE_NOT_AGGREGATABLE(CNmCallObj) BEGIN_COM_MAP(CNmCallObj) COM_INTERFACE_ENTRY(INmCall) COM_INTERFACE_ENTRY(IInternalCallObj) COM_INTERFACE_ENTRY(IConnectionPointContainer) COM_INTERFACE_ENTRY(INmCallNotify) COM_INTERFACE_ENTRY(INmCallNotify2) END_COM_MAP() BEGIN_CONNECTION_POINT_MAP(CNmCallObj) CONNECTION_POINT_ENTRY(IID_INmCallNotify) END_CONNECTION_POINT_MAP() // Construction and destruction CNmCallObj(); ~CNmCallObj(); HRESULT FinalConstruct(); ULONG InternalRelease(); //static HRESULT CreateInstance(INmCall* pInternalINmCall, INmCall** ppCall); static HRESULT CreateInstance(CNmManagerObj* pNmManagerObj, INmCall* pInternalINmCall, INmCall** ppCall); // INmCall methods STDMETHOD(IsIncoming)(void); STDMETHOD(GetState)(NM_CALL_STATE *pState); STDMETHOD(GetName)(BSTR *pbstrName); STDMETHOD(GetAddr)(BSTR *pbstrAddr, NM_ADDR_TYPE * puType); STDMETHOD(GetUserData)(REFGUID rguid, BYTE **ppb, ULONG *pcb); STDMETHOD(GetConference)(INmConference **ppConference); STDMETHOD(Accept)(void); STDMETHOD(Reject)(void); STDMETHOD(Cancel)(void); // INmCallNotify2 methods STDMETHOD(NmUI)(CONFN uNotify); STDMETHOD(StateChanged)(NM_CALL_STATE uState); STDMETHOD(Failed)(ULONG uError); STDMETHOD(Accepted)(INmConference *pInternalConference); // We don't care about these... STDMETHOD(CallError)(UINT cns) { return S_OK; } STDMETHOD(RemoteConference)(BOOL fMCU, BSTR *pwszConfNames, BSTR *pbstrConfToJoin) { return S_OK; } STDMETHOD(RemotePassword)(BSTR bstrConference, BSTR *pbstrPassword, BYTE *pb, DWORD cb, BOOL fIsService) { return S_OK; } // IInternalCallObj methods STDMETHOD(GetInternalINmCall)(INmCall** ppCall); static HRESULT StateChanged(INmCall* pInternalNmCall, NM_CALL_STATE uState); // INmCallNotify Notification Firing Fns HRESULT Fire_NmUI(CONFN uNotify); HRESULT Fire_StateChanged(NM_CALL_STATE uState); HRESULT Fire_Failed(ULONG uError); HRESULT Fire_Accepted(INmConference* pConference); private: // Helper Fns HRESULT _ReleaseResources(); static HRESULT _CreateInstanceGuts(CComObject *p, INmCall** ppCall); }; //HRESULT CreateEnumNmCall(IEnumNmCall** ppEnum); #endif // __NmCall_h__