中间件底层,websocket

SubjectAgentState.cpp 2.8KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  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. CString strGroup = m_pParent->getAgentGroup(Data);
  31. strncpy_s(info.szGroup, EVENT_SUBJECT_BUF_LEN, (LPCTSTR)strGroup, sizeof(strGroup));
  32. _dispatchEvent(&info, pHost->id(), info.szData);
  33. }
  34. /*****************************************************************
  35. **【函数名称】 _deleteData
  36. **【函数功能】 移除订阅数据
  37. **【参数】 Data: 要移除的数据内容
  38. pHost: 关联的观查者对象
  39. **【返回值】
  40. ****************************************************************/
  41. void CSubjectAgentState::_deleteData( int Data, CSubjectHost* pHost )
  42. {
  43. // 删除订阅数据
  44. pHost->delAgentId(Data);
  45. }
  46. /*****************************************************************
  47. **【函数名称】 _isHostEvent
  48. **【函数功能】 当前事件是否属于指定的观查者
  49. **【参数】 pEvent: 事件内容
  50. pHost: 关联的观查者对象
  51. **【返回值】
  52. ****************************************************************/
  53. BOOL CSubjectAgentState::_isHostEvent( EventSubject* pEvent, CSubjectHost* pHost )
  54. {
  55. // 当前事件是否当前观查者定阅的内容
  56. return pHost->isAgentIdCared(pEvent->SubData1);
  57. }
  58. /*****************************************************************
  59. **【函数名称】 incodeEvent
  60. **【函数功能】 打包通知事件内容
  61. **【参数】 SubData1 订阅数据1
  62. SubData2 订阅数据2
  63. Type: 事件类型
  64. Data: 附加信息
  65. **【返回值】 当前事件是否需要发送
  66. ****************************************************************/
  67. BOOL CSubjectAgentState::incodeEvent( UINT SubData1, UINT SubData2, SUBJECT_TYPE Type, int Data, EventSubject* pEvent, CString& szData)
  68. {
  69. if(m_HostList.IsEmpty())
  70. return FALSE;
  71. memset(pEvent, 0, sizeof(EventSubject));
  72. pEvent->SubData1 = SubData1;
  73. pEvent->SubData2 = SubData2;
  74. pEvent->nEventType = Type;
  75. sprintf_s(pEvent->szData, EVENT_SUBJECT_BUF_LEN, "%d", Data);
  76. strncpy_s(pEvent->szGroup, EVENT_SUBJECT_BUF_LEN,(LPCTSTR)szData, sizeof(szData)); // 2023-03-24 利用szData临时传递坐席组
  77. szData.Format("%d", Data);; // 2022-05-09
  78. return TRUE;
  79. }