多数据源中间件标准版1.0

Exten.cpp 4.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207
  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. /*****************************************************************
  52. **【函数名称】 release
  53. **【函数功能】 释放资源
  54. **【参数】
  55. **【返回值】
  56. ****************************************************************/
  57. void CExten::release( void )
  58. {
  59. // 添加消息可供视图刷新
  60. CMsgCenter::GetInstance().pushMsg(ACD_MSG_EXTEN_REMOVE, (const PARAM)m_ID);
  61. }
  62. //2018.5.18
  63. void CExten::onReportExtenState(UINT AgentState)
  64. {
  65. // 通知分机关联的座席状态信息
  66. if (m_AssoAgent != 0)
  67. {
  68. CPduEntity Cmd(PDU_CMD_CTI_LINE_STATE);
  69. Cmd.SetDataUInt(0, m_ID);
  70. Cmd.SetDataUInt(1, m_State);
  71. Cmd.SetDataULong(2, m_CallId);
  72. Cmd.SetDataUInt(3, m_AssoAgent);
  73. Cmd.SetDataString(4, m_CallerNum);
  74. Cmd.SetDataString(5, m_CalleeNum);
  75. Cmd.SetDataString(6, m_DataBind);
  76. Cmd.SetDataUInt(7, m_PeerLineType);
  77. Cmd.SetDataUInt(8, m_InfoEx);
  78. Cmd.SetDataUInt(9, m_FinalExt);
  79. Cmd.SetDataUInt(10, m_OpType);
  80. Cmd.SetDataUInt(11, 0);
  81. Cmd.SetDataUInt(12, AgentState);
  82. //CNetworkAcd::GetInstance().send2Agent(m_AssoAgent, &Cmd);
  83. CNetworkAcd::GetInstance().send2Server(&Cmd);
  84. } // end if
  85. // 添加消息可供视图刷新
  86. CMsgCenter::GetInstance().pushMsg(ACD_MSG_EXTEN_STATE_UPDATE, (PARAM)m_ID);
  87. }
  88. /*****************************************************************
  89. **【函数名称】 SetExtState
  90. **【函数功能】 设置分机当前状态
  91. **【参数】
  92. **【返回值】
  93. ****************************************************************/
  94. void CExten::setState( CPduEntity* a_pCmd ,BOOL bReportState)
  95. {
  96. ASSERT(a_pCmd != NULL);
  97. // 保存状态
  98. UINT State = a_pCmd->GetDataUInt(1);
  99. if(m_State == State)
  100. return;
  101. // 保存相关信息
  102. m_State = (INNER_STATE)State;
  103. m_CallId = a_pCmd->GetDataULong(2);
  104. lstrcpy(m_CallerNum, a_pCmd->GetDataString(4));
  105. lstrcpy(m_CalleeNum, a_pCmd->GetDataString(5));
  106. lstrcpy(m_DataBind, a_pCmd->GetDataString(6));
  107. m_PeerLineType = a_pCmd->GetDataUInt(7);
  108. m_InfoEx = a_pCmd->GetDataUInt(8);
  109. m_FinalExt = a_pCmd->GetDataUInt(9);
  110. m_OpType = a_pCmd->GetDataUInt(10);
  111. // 通知当前分机状态
  112. if (bReportState == TRUE)
  113. {
  114. __reportStatus();
  115. }
  116. else
  117. {
  118. // 添加消息可供视图刷新
  119. CMsgCenter::GetInstance().pushMsg(ACD_MSG_EXTEN_STATE_UPDATE, (PARAM)m_ID);
  120. }
  121. }
  122. /*****************************************************************
  123. **【函数名称】 setAssoAgent
  124. **【函数功能】 设置关联的座席
  125. **【参数】
  126. **【返回值】
  127. ****************************************************************/
  128. void CExten::setAssoAgent( UINT a_AgentId )
  129. {
  130. m_AssoAgent = a_AgentId;
  131. // 通知当前分机状态
  132. __reportStatus();
  133. }
  134. UINT& CExten::GetID()
  135. {
  136. return m_ID;
  137. }
  138. INNER_STATE& CExten::GetState()
  139. {
  140. return m_State;
  141. }
  142. UINT& CExten::GetAssoAgent()
  143. {
  144. return m_AssoAgent;
  145. }
  146. ULONG& CExten::GetCallId()
  147. {
  148. return m_CallId;
  149. }
  150. CHAR* CExten::GetCallerNum()
  151. {
  152. return m_CallerNum;
  153. }
  154. CHAR* CExten::GetCalleeNum()
  155. {
  156. return m_CalleeNum;
  157. }
  158. CHAR* CExten::GetDataBind()
  159. {
  160. return m_DataBind;
  161. }
  162. UINT& CExten::GetPeerLineType()
  163. {
  164. return m_PeerLineType;
  165. }
  166. UINT& CExten::GetFinalExt()
  167. {
  168. return m_FinalExt;
  169. }
  170. UINT& CExten::GetOpType()
  171. {
  172. return m_OpType;
  173. }
  174. UINT& CExten::GetInfoEx()
  175. {
  176. return m_InfoEx;
  177. }