| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- /*************************************************************************
- 【文件名】 Subject.h
- 【功能模块和目的】 订阅主题基类头文件
- 【开发者及日期】 郑石诺 2015/01/22
- 【版本】 V1.0.0
- 【版权信息】 Copyright (C)2015 河南华谊网络科技有限公司
- 【更改记录】
- *************************************************************************/
- #pragma once
- class CSubjectHost;
- class CSubjectRepository;
- /*************************************************************************
- 【类名】 CSubject
- 【功能】
- 【接口说明】 订阅主题基类
- 【开发者及日期】 郑石诺 2015/01/22
- 【版本】 V1.0.0
- 【版权信息】 Copyright (C)2015 河南华谊网络科技有限公司
- 【更改记录】
- *************************************************************************/
- class CSubject
- {
- public:
- CSubject(CSubjectRepository* pParent);
- virtual ~CSubject(void) = 0 {}
- // 打包通知事件内容
- virtual BOOL incodeEvent(UINT SubData1, UINT SubData2, SUBJECT_TYPE Type, int Data, EventSubject* pEvent) = 0;
- // 事件通知接口
- void onEvent(EventSubject* pEvent);
- // 订阅接口
- void registObserver(UINT AgentId, int Data, SUBJECT_TYPE Type); // 注册订阅
- void removeObserver(UINT AgentId, int Data); // 取消订阅
- protected:
- // 发送事件到指定座席
- void _dispatchEvent(EventSubject* pEvent, UINT AgentId);
- // 重载操作
- virtual void _insertData(int Data, CSubjectHost* pHost, SUBJECT_TYPE Type) = 0; // 追加订阅数据
- virtual void _deleteData(int Data, CSubjectHost* pHost) = 0; // 移除订阅数据
- virtual BOOL _isHostEvent(EventSubject* pEvent, CSubjectHost* pHost) = 0; // 当前事件是否属于指于的订阅者
- private:
- CSubjectHost* __getHost(UINT AgentId); // 得到指定ID的观查者
- void __removeHost(UINT AgentId); // 删除指定ID的观查者
- protected:
- CSubjectRepository* m_pParent; // 订阅主控管理类
- CList<CSubjectHost*, CSubjectHost*> m_HostList; // 当前主题的观查者列表
- };
|