中间件底层,websocket

SubjectAgentsOnSpecState.cpp 2.3KB

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