/*++ Copyright (c) 1998-1999 Microsoft Corporation Module Name: AgentHand.h Abstract: Declaration of the CAgentHandler Class Author: noela 02-06-98 Notes: Revision History: --*/ #ifndef __AGENTHANDLER_H #define __AGENTHANDLER_H #include "resource.h" // main symbols class CAgent; class CTAPI; class CAgentSession; class CQueue; ///////////////////////////////////////////////////////////////////////////// // CAgentHandler class ATL_NO_VTABLE CAgentHandler : public CTAPIComObjectRoot, public IDispatchImpl, public CObjectSafeImpl { private: PWSTR m_szName; GUID m_GUID; AddressLineStruct * m_pAddressLine; // Where we find our hLine CTAPI * m_tapiObj; // Tapi obj this AH belongs to GroupArray m_GroupArray; AgentArray m_AgentArray; AddressArray m_AddressArray; CHashTable m_AgentSessionHashtable; CHashTable m_QueueHashtable; public: CAgentHandler(){} GUID getHandle() {return m_GUID;} HRESULT InternalCreateAgent(BSTR pID, BSTR pPIN, CAgent ** ppAgent); void AddAddress(CAddress *pAddress); HLINE getHLine(); CTAPI * GetTapi() { return m_tapiObj; } HRESULT UpdateGroupArray(); void FinalRelease(); void AddAgentSessionToHash(HAGENTSESSION hSession, CAgentSession *pSession) { m_AgentSessionHashtable.Lock(); m_AgentSessionHashtable.Insert( (ULONG_PTR)(hSession), (ULONG_PTR)pSession ); m_AgentSessionHashtable.Unlock(); } void RemoveAgentSessionFromHash(HAGENTSESSION hSession) { m_AgentSessionHashtable.Lock(); m_AgentSessionHashtable.Remove( (ULONG_PTR)(hSession) ); m_AgentSessionHashtable.Unlock(); } BOOL FindSessionObject(HAGENTSESSION hAgentSession, CAgentSession ** ppAgentSession); void AddQueueToHash(DWORD dwQueueID, CQueue *pQueue) { m_QueueHashtable.Lock(); m_QueueHashtable.Insert( (ULONG_PTR)(dwQueueID), (ULONG_PTR)pQueue ); m_QueueHashtable.Unlock(); } void RemoveQueueFromHash(DWORD dwQueueID) { m_QueueHashtable.Lock(); m_QueueHashtable.Remove( (ULONG_PTR)(dwQueueID) ); m_QueueHashtable.Unlock(); } BOOL FindQueueObject(DWORD dwQueueID,CQueue ** ppQueue); BOOL FindAgentObject( HAGENT hAgent, CAgent ** ppAgent); DECLARE_MARSHALQI(CAgentHandler) DECLARE_QI() DECLARE_TRACELOG_CLASS(CAgentHandler) BEGIN_COM_MAP(CAgentHandler) COM_INTERFACE_ENTRY(ITAgentHandler) COM_INTERFACE_ENTRY(IDispatch) COM_INTERFACE_ENTRY(IObjectSafety) COM_INTERFACE_ENTRY_FUNC(IID_IMarshal, 0, IMarshalQI) COM_INTERFACE_ENTRY_AGGREGATE(IID_IMarshal, m_pFTM) END_COM_MAP() // ITAgentHandler public: STDMETHOD(get_Name)(BSTR * ppName); STDMETHOD(CreateAgent)(ITAgent **ppAgent); STDMETHOD(CreateAgentWithID)(BSTR pID, BSTR pPIN, ITAgent **ppAgent); STDMETHOD(EnumerateACDGroups)(IEnumACDGroup ** ppEnumGroup); STDMETHOD(get_ACDGroups)(VARIANT * pVariant); STDMETHOD(EnumerateUsableAddresses)(IEnumAddress ** ppEnumAddress); STDMETHOD(get_UsableAddresses)(VARIANT * pVariant); STDMETHOD(Initialize) (PWSTR proxyName, GUID proxyGUID, CTAPI *tapiObj); }; ///////////////////////////////////////////////////////////////////////////// // CAgentHandlerEvent class ATL_NO_VTABLE CAgentHandlerEvent : public CTAPIComObjectRoot, public IDispatchImpl, public CObjectSafeImpl { protected: AGENTHANDLER_EVENT m_AgentHandlerEvent; ITAgentHandler * m_pAgentHandler; public: CAgentHandlerEvent() { } static HRESULT FireEvent( CAgentHandler * pAgentHandler, AGENTHANDLER_EVENT Event ); void FinalRelease(); DECLARE_MARSHALQI(CAgentHandlerEvent) DECLARE_TRACELOG_CLASS(CAgentHandlerEvent) BEGIN_COM_MAP(CAgentHandlerEvent) COM_INTERFACE_ENTRY(ITAgentHandlerEvent) COM_INTERFACE_ENTRY(IDispatch) COM_INTERFACE_ENTRY(IObjectSafety) COM_INTERFACE_ENTRY_FUNC(IID_IMarshal, 0, IMarshalQI) COM_INTERFACE_ENTRY_AGGREGATE(IID_IMarshal, m_pFTM) END_COM_MAP() // CAgentHandlerEvent public: STDMETHOD(get_Event)(AGENTHANDLER_EVENT * pEvent); STDMETHOD(get_AgentHandler)(ITAgentHandler ** ppAgentHandler); }; #endif //__AGENTHANDLER_H