中间件底层,websocket

Exten.cpp 5.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231
  1. #include "StdAfx.h"
  2. #include "Exten.h"
  3. #include "AcdCore.h"
  4. #include "MsgCenter.h"
  5. #include "NetworkAcd.h"
  6. CExten::CExten(UINT a_ExtId)
  7. {
  8. // 基础信息
  9. m_ID = a_ExtId;
  10. m_State = INNER_STATE_DISABLED;
  11. m_AssoAgent = 0;
  12. // 附加信息
  13. m_CallId = 0;
  14. ZeroMemory(m_CallerNum, PHONE_NUM_LEN);
  15. ZeroMemory(m_CalleeNum, PHONE_NUM_LEN);
  16. ZeroMemory(m_DataBind, MAX_DATA_BUF_LEN);
  17. m_PeerLineType = LINE_NULL;
  18. }
  19. CExten::~CExten(void)
  20. {
  21. }
  22. /*****************************************************************
  23. **【函数名称】 __reportStatus
  24. **【函数功能】 通知分机状态
  25. **【参数】
  26. **【返回值】
  27. ****************************************************************/
  28. void CExten::__reportStatus( void )
  29. {
  30. // 通知分机关联的座席状态信息
  31. if(m_AssoAgent != 0)
  32. {
  33. CPduEntity Cmd(PDU_CMD_CTI_LINE_STATE);
  34. Cmd.SetDataUInt(0, m_ID);
  35. Cmd.SetDataUInt(1, m_State);
  36. Cmd.SetDataULong(2, m_CallId);
  37. Cmd.SetDataUInt(3, m_AssoAgent);
  38. Cmd.SetDataString(4, m_CallerNum);
  39. Cmd.SetDataString(5, m_CalleeNum);
  40. Cmd.SetDataString(6, m_DataBind);
  41. Cmd.SetDataUInt(7, m_PeerLineType);
  42. Cmd.SetDataUInt(8, m_InfoEx);
  43. Cmd.SetDataUInt(9, m_FinalExt);
  44. Cmd.SetDataUInt(10, m_OpType);
  45. //CNetworkAcd::GetInstance().send2Agent(m_AssoAgent, &Cmd);
  46. CNetworkAcd::GetInstance().send2Server(&Cmd);
  47. } // end if
  48. // 添加消息可供视图刷新
  49. CMsgCenter::GetInstance().pushMsg(ACD_MSG_EXTEN_STATE_UPDATE, (PARAM)m_ID);
  50. }
  51. void CExten::__reportStatus(CPduEntity* a_pCmd)
  52. {
  53. // 通知分机关联的座席状态信息
  54. if (m_AssoAgent != 0)
  55. {
  56. CPduEntity Cmd(PDU_CMD_CTI_LINE_STATE);
  57. Cmd.SetDataUInt(0, m_ID);
  58. Cmd.SetDataUInt(1, m_State);
  59. Cmd.SetDataULong(2, m_CallId);
  60. Cmd.SetDataUInt(3, m_AssoAgent);
  61. Cmd.SetDataString(4, m_CallerNum);
  62. Cmd.SetDataString(5, m_CalleeNum);
  63. Cmd.SetDataString(6, m_DataBind);
  64. Cmd.SetDataUInt(7, m_PeerLineType);
  65. Cmd.SetDataUInt(8, m_InfoEx);
  66. Cmd.SetDataUInt(9, m_FinalExt);
  67. Cmd.SetDataUInt(10, m_OpType);
  68. Cmd.SetDataInt(11, a_pCmd->GetDataInt(11)); // actionid,舍弃不用了
  69. Cmd.SetDataString(13, a_pCmd->GetDataString(13)); // 中继号
  70. CNetworkAcd::GetInstance().send2Server(&Cmd);
  71. } // end if
  72. // 添加消息可供视图刷新
  73. CMsgCenter::GetInstance().pushMsg(ACD_MSG_EXTEN_STATE_UPDATE, (PARAM)m_ID);
  74. }
  75. /*****************************************************************
  76. **【函数名称】 release
  77. **【函数功能】 释放资源
  78. **【参数】
  79. **【返回值】
  80. ****************************************************************/
  81. void CExten::release( void )
  82. {
  83. // 添加消息可供视图刷新
  84. CMsgCenter::GetInstance().pushMsg(ACD_MSG_EXTEN_REMOVE, (const PARAM)m_ID);
  85. }
  86. //2018.5.18
  87. void CExten::onReportExtenState(UINT AgentState)
  88. {
  89. // 通知分机关联的座席状态信息
  90. if (m_AssoAgent != 0)
  91. {
  92. CPduEntity Cmd(PDU_CMD_CTI_LINE_STATE);
  93. Cmd.SetDataUInt(0, m_ID);
  94. Cmd.SetDataUInt(1, m_State);
  95. Cmd.SetDataULong(2, m_CallId);
  96. Cmd.SetDataUInt(3, m_AssoAgent);
  97. Cmd.SetDataString(4, m_CallerNum);
  98. Cmd.SetDataString(5, m_CalleeNum);
  99. Cmd.SetDataString(6, m_DataBind);
  100. Cmd.SetDataUInt(7, m_PeerLineType);
  101. Cmd.SetDataUInt(8, m_InfoEx);
  102. Cmd.SetDataUInt(9, m_FinalExt);
  103. Cmd.SetDataUInt(10, m_OpType);
  104. Cmd.SetDataUInt(11, 0);
  105. Cmd.SetDataUInt(12, AgentState);
  106. //CNetworkAcd::GetInstance().send2Agent(m_AssoAgent, &Cmd);
  107. CNetworkAcd::GetInstance().send2Server(&Cmd);
  108. } // end if
  109. // 添加消息可供视图刷新
  110. CMsgCenter::GetInstance().pushMsg(ACD_MSG_EXTEN_STATE_UPDATE, (PARAM)m_ID);
  111. }
  112. /*****************************************************************
  113. **【函数名称】 SetExtState
  114. **【函数功能】 设置分机当前状态
  115. **【参数】
  116. **【返回值】
  117. ****************************************************************/
  118. void CExten::setState( CPduEntity* a_pCmd ,BOOL bReportState)
  119. {
  120. ASSERT(a_pCmd != NULL);
  121. // 保存状态
  122. UINT State = a_pCmd->GetDataUInt(1);
  123. if(m_State == State)
  124. return;
  125. // 保存相关信息
  126. m_State = (INNER_STATE)State;
  127. m_CallId = a_pCmd->GetDataULong(2);
  128. lstrcpy(m_CallerNum, a_pCmd->GetDataString(4));
  129. lstrcpy(m_CalleeNum, a_pCmd->GetDataString(5));
  130. lstrcpy(m_DataBind, a_pCmd->GetDataString(6));
  131. m_PeerLineType = a_pCmd->GetDataUInt(7);
  132. m_InfoEx = a_pCmd->GetDataUInt(8);
  133. m_FinalExt = a_pCmd->GetDataUInt(9);
  134. m_OpType = a_pCmd->GetDataUInt(10);
  135. // 通知当前分机状态
  136. if (bReportState == TRUE)
  137. {
  138. __reportStatus(a_pCmd); // 2021-06-11 重载该函数,便于携带参数
  139. }
  140. else
  141. {
  142. // 添加消息可供视图刷新
  143. CMsgCenter::GetInstance().pushMsg(ACD_MSG_EXTEN_STATE_UPDATE, (PARAM)m_ID);
  144. }
  145. }
  146. /*****************************************************************
  147. **【函数名称】 setAssoAgent
  148. **【函数功能】 设置关联的座席
  149. **【参数】
  150. **【返回值】
  151. ****************************************************************/
  152. void CExten::setAssoAgent( UINT a_AgentId )
  153. {
  154. m_AssoAgent = a_AgentId;
  155. // 通知当前分机状态
  156. __reportStatus();
  157. }
  158. UINT& CExten::GetID()
  159. {
  160. return m_ID;
  161. }
  162. INNER_STATE& CExten::GetState()
  163. {
  164. return m_State;
  165. }
  166. UINT& CExten::GetAssoAgent()
  167. {
  168. return m_AssoAgent;
  169. }
  170. ULONG& CExten::GetCallId()
  171. {
  172. return m_CallId;
  173. }
  174. CHAR* CExten::GetCallerNum()
  175. {
  176. return m_CallerNum;
  177. }
  178. CHAR* CExten::GetCalleeNum()
  179. {
  180. return m_CalleeNum;
  181. }
  182. CHAR* CExten::GetDataBind()
  183. {
  184. return m_DataBind;
  185. }
  186. UINT& CExten::GetPeerLineType()
  187. {
  188. return m_PeerLineType;
  189. }
  190. UINT& CExten::GetFinalExt()
  191. {
  192. return m_FinalExt;
  193. }
  194. UINT& CExten::GetOpType()
  195. {
  196. return m_OpType;
  197. }
  198. UINT& CExten::GetInfoEx()
  199. {
  200. return m_InfoEx;
  201. }