多数据源中间件标准版1.0

SubjectAgentState.cpp 2.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. #include "StdAfx.h"
  2. #include "SubjectAgentState.h"
  3. #include "SubjectRepository.h"
  4. #include "SubjectHost.h"
  5. CSubjectAgentState::CSubjectAgentState(CSubjectRepository* pParent) : CSubject(pParent)
  6. {
  7. }
  8. CSubjectAgentState::~CSubjectAgentState(void)
  9. {
  10. }
  11. /*****************************************************************
  12. **【函数名称】 _insertData
  13. **【函数功能】 追加订阅数据
  14. **【参数】 Data: 要追加的数据内容
  15. pHost: 关联的观查者对象
  16. Type: 订阅类型
  17. **【返回值】
  18. ****************************************************************/
  19. void CSubjectAgentState::_insertData( int Data, CSubjectHost* pHost, SUBJECT_TYPE Type )
  20. {
  21. // 保存订阅的数据
  22. pHost->addAgentId(Data);
  23. // 提取被订阅座席的状态到发送到当前观查者
  24. EventSubject info;
  25. memset(&info, 0, sizeof(EventSubject));
  26. info.SubData1 = Data;
  27. info.SubData2 = m_pParent->getAgentAssoExten(Data);
  28. info.nEventType = Type;
  29. sprintf_s(info.szData, EVENT_SUBJECT_BUF_LEN, "%d", m_pParent->getAgentState(Data));
  30. _dispatchEvent(&info, pHost->id());
  31. }
  32. /*****************************************************************
  33. **【函数名称】 _deleteData
  34. **【函数功能】 移除订阅数据
  35. **【参数】 Data: 要移除的数据内容
  36. pHost: 关联的观查者对象
  37. **【返回值】
  38. ****************************************************************/
  39. void CSubjectAgentState::_deleteData( int Data, CSubjectHost* pHost )
  40. {
  41. // 删除订阅数据
  42. pHost->delAgentId(Data);
  43. }
  44. /*****************************************************************
  45. **【函数名称】 _isHostEvent
  46. **【函数功能】 当前事件是否属于指定的观查者
  47. **【参数】 pEvent: 事件内容
  48. pHost: 关联的观查者对象
  49. **【返回值】
  50. ****************************************************************/
  51. BOOL CSubjectAgentState::_isHostEvent( EventSubject* pEvent, CSubjectHost* pHost )
  52. {
  53. // 当前事件是否当前观查者定阅的内容
  54. return pHost->isAgentIdCared(pEvent->SubData1);
  55. }
  56. /*****************************************************************
  57. **【函数名称】 incodeEvent
  58. **【函数功能】 打包通知事件内容
  59. **【参数】 SubData1 订阅数据1
  60. SubData2 订阅数据2
  61. Type: 事件类型
  62. Data: 附加信息
  63. **【返回值】 当前事件是否需要发送
  64. ****************************************************************/
  65. BOOL CSubjectAgentState::incodeEvent( UINT SubData1, UINT SubData2, SUBJECT_TYPE Type, int Data, EventSubject* pEvent )
  66. {
  67. if(m_HostList.IsEmpty())
  68. return FALSE;
  69. memset(pEvent, 0, sizeof(EventSubject));
  70. pEvent->SubData1 = SubData1;
  71. pEvent->SubData2 = SubData2;
  72. pEvent->nEventType = Type;
  73. sprintf_s(pEvent->szData, EVENT_SUBJECT_BUF_LEN, "%d", Data);
  74. return TRUE;
  75. }