/************************************************************************* 【文件名】 SubjectRepository.h 【功能模块和目的】 发布主题管理类头文件 【开发者及日期】 郑石诺 2015/01/22 【版本】 V1.0.0 【版权信息】 Copyright (C)2015 河南华谊网络科技有限公司 【更改记录】 *************************************************************************/ #pragma once class CAgentOffice; class CExtenCtrl; class CQueueMgr; class CSubject; /************************************************************************* 【类名】 CSubjectRepository 【功能】 【接口说明】 发布主题管理类 【开发者及日期】 郑石诺 2015/01/22 【版本】 V1.0.0 【版权信息】 Copyright (C)2015 河南华谊网络科技有限公司 【更改记录】 *************************************************************************/ class CSubjectRepository { public: CSubjectRepository(CAgentOffice* pAgentOffice, CExtenCtrl* pExtenCtrl, CQueueMgr* pQueueMgr); ~CSubjectRepository(void); // 订阅接口 void registObserver(UINT AgentId, SUBJECT_TYPE Type, int Data); // 注册订阅 void removeObserver(UINT AgentId, SUBJECT_TYPE Type, int Data); // 取消订阅 // 清除指定座席的所有订阅的主题 void clearObserver(UINT AgentId); // 信息通知接口 void onAgentStateUpdated(UINT Id, UINT ExtId, int State); // 座席状态变化事件响应 void onPhoneStateUpdated(UINT Id, UINT ExtId, int State); // 分机状态变化事件响应 void onQueueStateUpdated(UINT QueueNo, UINT Count); // 排队状态变化事件响应 void onTrunkUsageUpdated(UINT TaskId, UINT Usage); // 呼叫任务外线利用率变化事件响应 // 信息管理控制,供内部主题类调用 UINT getAgentAssoExten(UINT AgentId); // 得到指定座席的关联分机号 UINT getAgentAssoExtState(UINT AgentId); // 得到指定座席的关联分机状态 UINT getAgentState(UINT AgentId); // 得到指定座席的当前状态 UINT getIncomingCallCount(UINT QueueNo); // 得到等待排队的呼叫数量 void getStateSpecAgentList(SUBJECT_TYPE Type, CString& AgentList); // 获取指定状态的座席列表 CAgentOffice* GetAgentOffice() {return m_pAgentOffice;} // private: void __initSubjectMap(void); // 初始化主题索引表 void __clearSubjectMap(void); // 清空主题索引表 CSubject* __getSubject(SUBJECT_TYPE Type); // 得到指定类型的主题 private: CExtenCtrl* m_pExtenCtrl; // 内线分机管理类 CQueueMgr* m_pQueueMgr; // 排队来电管理类 CAgentOffice* m_pAgentOffice; // 座席管理类 CCriticalSection m_RegistLock; CMap m_SubjectMap; // 主题索引表 };