中间件底层,websocket

Agent.h 5.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. /*************************************************************************
  2. 【文件名】 Agent.h
  3. 【功能模块和目的】 座席类头文件
  4. 【开发者及日期】 郑石诺 2015/01/19
  5. 【版本】 V1.0.0
  6. 【版权信息】 Copyright (C)2015 河南加一信息技术有限公司
  7. 【更改记录】
  8. *************************************************************************/
  9. #pragma once
  10. #include <atomic>
  11. #include "TemplateTimer.h"
  12. class CAgent;
  13. class CAgentProperty // ych 2018.5.4
  14. {
  15. public:
  16. CAgent* pAgent;
  17. CTime m_FirstLogTimeToday;
  18. // 业务属性
  19. UINT m_TimePostProcessing; // 话后处理时长
  20. UINT m_AnswerCount; // 应答次数
  21. UINT m_ReposeCount; // 小休次数
  22. UINT m_TimeFree; // 空闲时长
  23. UINT m_TimeRepos; // 小休时长
  24. UINT m_TimeTalk; // 通话时长
  25. CAgentProperty()
  26. {
  27. pAgent = NULL;
  28. }
  29. };
  30. /*************************************************************************
  31. 【类名】 CAgent
  32. 【功能】
  33. 【接口说明】 座席类
  34. 【开发者及日期】 郑石诺 2015/01/19
  35. 【版本】 V1.0.0
  36. 【版权信息】 Copyright (C)2015 河南加一信息技术有限公司
  37. 【更改记录】
  38. *************************************************************************/
  39. class CAgent
  40. {
  41. public:
  42. CAgent(UINT a_AgentID, UINT a_ExtID, LPCTSTR a_GroupID, UINT a_AgentType, UINT a_PostProcessingTime);
  43. //CAgent(UINT a_AgentID, UINT a_ExtID, LPCTSTR a_GroupID, UINT a_AgentType, const CAgentProperty& AgentProperty); // ych 2018.5.4 2020-03-05 屏蔽
  44. ~CAgent(void);
  45. // 清理资源
  46. void release(UINT HostAgent);
  47. // 座席是否空闲
  48. bool isFree(void) const { return (m_State == AGENT_STATE_FREE && m_AssoExtState == INNER_STATE_FREE && !m_IsRepose); }
  49. bool isFreeForCall(void) const { return (m_State == AGENT_STATE_FREE && m_AssoExtState == INNER_STATE_FREE/* && !m_IsRepose*/); } // 安图拷贝
  50. // 属性操作
  51. BOOL setState(AGENT_STATE a_AgentState, bool IsForce = false); // 设置座席的逻辑状态
  52. bool sendState(AGENT_STATE a_AgentState); // 2022-01-09
  53. /*2020-04-03 安图复制,解决置忙情况下外呼后状态为置忙 start*/
  54. BOOL setFreeForAgentCall(bool IsForce = false);
  55. BOOL setRequestedForAgentCall(bool IsForce = false);
  56. BOOL setBusyForAgentCall(bool IsForce = false);
  57. BOOL setProcessingForAgentCall(bool IsForce = false);
  58. /* end*/
  59. void onAssoExtStatusUpdated(INNER_STATE a_ExtState, PARAM Param = NULL); // 关联分机状态更新的处理函数
  60. const CString& ip(void) const { return m_AgentIp; } // 读取座席的主机IP
  61. UINT assoExten(void) const { return m_Exten; } // 读取关联的分机ID
  62. UINT id(void) const { return m_AgentID; } // 读取座席工号
  63. LPCTSTR group(void) const { return m_GroupID; } // 读取座席组号
  64. //UINT answerCount(void) const { return m_AnswerCount; } // 读取应答次数
  65. //UINT freeTime(void) const { return m_TimeFree; } // 读取空闲时长
  66. /********2019-12-19************/
  67. UINT answerCount(void) const { return m_AnswerCount + m_AnswerCountOld; } // 读取应答次数
  68. UINT freeTime(void) const { return m_TimeFree + m_TimeFreeOld; } // 读取空闲时长
  69. UINT type(void) const { return m_AgentType; } // 读取坐席类型
  70. AGENT_STATE state(void) const { return m_State; } // 得到座席实际状态
  71. BOOL isRepose(void) const { return m_IsRepose; } // 读取座席是否置忙
  72. const AgentGroupNoList& groupNoList(void) const { return m_GroupNoList; }
  73. AgentGroupNoList& groupNoList(void) { return m_GroupNoList; }
  74. BOOL lock(void);
  75. BOOL lockForCall(void); // 安图拷贝
  76. void GetAgentProperty(CAgentProperty& AgentProperty); // ych 2018.5.4 2020-03-05 屏蔽
  77. bool queueJump();
  78. private:
  79. // 统计处理
  80. void __reportLogin(); // 签出统计通知
  81. void __reportLogout(const UINT HostAgent); // 签出统计通知
  82. void __onStatusUpdate(AGENT_STATE State, bool StartFlag);
  83. void __reportStatus(void); // 上报座席当前状态
  84. // 定时器处理
  85. void __onTimerPoll(void); // 轮询处理
  86. void __onTimerPostProcessing(void); // 话后处理时长处理
  87. void __onTimerLock(void); // 座席被锁定超时处理
  88. void __setTimer(UINT TimmerId, UINT Elapse);
  89. void __killTimer(UINT TimmerId);
  90. private:
  91. // 定时器常量
  92. static const UINT TIMER_POST_PROCESSING = 1001; // 话后处理定时器ID
  93. static const UINT TIMER_LOCK_PERIOD = 1005; // 锁定定时器ID
  94. // 座席网络属性
  95. CString m_AgentIp; // 座席网络IP
  96. int m_AgentPort; // 座席网络端口号
  97. // 座席基本属性
  98. UINT m_AgentID; // 座席工号
  99. UINT m_Exten; // 关联分机号
  100. CString m_GroupID; // 座席组号
  101. AGENT_TYPE m_AgentType; // 座席类型
  102. AGENT_STATE m_State; // 座席状态
  103. INNER_STATE m_AssoExtState; // 关联分机状态
  104. bool m_IsRepose; // 是否小休
  105. AgentGroupNoList m_GroupNoList; // 座席组号列表
  106. bool m_bFirstQueue; //2018.6.11 for loop
  107. // 业务属性
  108. UINT m_TypePostProcessing; // 话后处理类型 0:自动 1:手动
  109. UINT m_TimePostProcessing; // 话后处理时长
  110. UINT m_AnswerCount; // 应答次数
  111. UINT m_ReposeCount; // 小休次数
  112. //UINT m_TimeFree; // 空闲时长
  113. std::atomic<UINT> m_TimeFree; // 空闲时长 // 2020-03-05 防止 定时器,挂断后该值置0时 该变量被同时操作
  114. UINT m_TimeRepos; // 小休时长
  115. UINT m_TimeTalk; // 通话时长
  116. /************2019-12-19 历史记录**************************/
  117. UINT m_AnswerCountOld; // 应答次数
  118. UINT m_ReposeCountOld; // 小休次数 暂不需要使用
  119. UINT m_TimeFreeOld; // 空闲时长
  120. UINT m_TimeReposOld; // 小休时长 暂不需要使用
  121. UINT m_TimeTalkOld; // 通话时长 暂不需要使用
  122. /**************************************/
  123. TTimer<CAgent> m_PollTimer; // 轮询定时器
  124. TTimer<CAgent> m_AgentTimer; // 座席定时器,用于锁定和话后处理
  125. };