升龙物业 老版本 ocx IPO, 加密狗 转值班电话

AgentOp.cpp 17KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680
  1. #include "StdAfx.h"
  2. #include "AgentOp.h"
  3. #include "AgentClient.h"
  4. #include "AgentLog.h"
  5. #include "AgentEventManager.h"
  6. #include "PduEntity.h"
  7. #include "NetCtrlInterface.h"
  8. CAgentOp::CAgentOp(CAgentClient* pClient)
  9. {
  10. m_pAgentClient = pClient;
  11. }
  12. CAgentOp::~CAgentOp(void)
  13. {
  14. }
  15. /*****************************************************************
  16. **【函数名称】 OnRecvCommand
  17. **【函数功能】 发送坐席操作命令
  18. **【参数】
  19. **【返回值】
  20. ****************************************************************/
  21. BOOL CAgentOp::SendCmdAgentOp(CPduEntity* pEntity, ErrorCode &nErrCode)
  22. {
  23. // 判断连接状态
  24. if (m_pAgentClient->m_nAgentLinkState != PDU_LINK_STATE_REG_OK)
  25. {
  26. m_pAgentClient->SetErrorCode(ERR_NO_AGENT_SOCKET);
  27. nErrCode = ERR_NO_AGENT_SOCKET;
  28. return FALSE;
  29. }
  30. // 设置分机号和坐席工号
  31. pEntity->SetDataUInt(1,m_pAgentClient->m_nAgentExtension);
  32. pEntity->SetDataUInt(2,m_pAgentClient->m_nAgentNumber);
  33. // 发送命令
  34. if (!CInterfaceWindow::getCommInstance()->Send(pEntity, PDU_DEV_TYPE_ACD, 0))
  35. {
  36. m_pAgentClient->SetErrorCode( ERR_SEND_MSG );
  37. nErrCode = ERR_SEND_MSG;
  38. return FALSE;
  39. }
  40. nErrCode = NO_ERR;
  41. return TRUE;
  42. }
  43. /*****************************************************************
  44. **【函数名称】 CheckDestNum
  45. **【函数功能】 操作号码校验
  46. **【参数】
  47. **【返回值】
  48. ****************************************************************/
  49. BOOL CAgentOp::CheckDestNum(CString strDestNum, ErrorCode& nErrCode)
  50. {
  51. // 对号码长度进行校验
  52. if(strDestNum.GetLength() >= PHONE_NUM_LEN)
  53. {
  54. nErrCode = ERR_TARGET_NUMBER_TOO_LONG;
  55. return FALSE;
  56. }
  57. // 检查是否包含特殊字符(或者为空)
  58. if (strDestNum.Find('%') != -1 || strDestNum.Find('&') != -1 || strDestNum.Find('/') != -1
  59. || strDestNum.Find('\\') != -1 || strDestNum.Find('@') != -1 || strDestNum.Find('$') != -1 || strDestNum == "")
  60. {
  61. nErrCode = ERR_DESTNUM_SPACIL;
  62. return FALSE;
  63. }
  64. // 检查是否是操作自己
  65. CString tmpStrAgentNumber = "";
  66. CString tmpStrAgentExtension = "";
  67. tmpStrAgentNumber.Format( "%d", m_pAgentClient->m_nAgentNumber );
  68. tmpStrAgentExtension.Format( "%d", m_pAgentClient->m_nAgentExtension );
  69. if (strDestNum == tmpStrAgentNumber || strDestNum == tmpStrAgentExtension)
  70. {
  71. nErrCode = ERR_MAKECALL_BY_SELF;
  72. return FALSE;
  73. }
  74. nErrCode = NO_ERR;
  75. return TRUE;
  76. }
  77. /*****************************************************************
  78. **【函数名称】 Login
  79. **【函数功能】 签入到ACD服务器
  80. **【参数】
  81. **【返回值】
  82. ****************************************************************/
  83. void CAgentOp::Login()
  84. {
  85. // 打包命令并发送
  86. CPduEntity cmd(PDU_CMD_AGENT_LOGIN);
  87. cmd.SetDataString(3, m_pAgentClient->m_sAgentGroup);
  88. cmd.SetDataUInt(4, m_pAgentClient->m_nAgentType);
  89. cmd.SetDataUInt(5, m_pAgentClient->m_nWorkOverTime);
  90. ErrorCode nErrCode;
  91. if (!SendCmdAgentOp(&cmd, nErrCode))
  92. {
  93. m_pAgentClient->GetEventManager()->Fire_Evt_LogIn( false, nErrCode);
  94. return;
  95. }
  96. // 记录到日志
  97. m_pAgentClient->GetAgentLog()->Log( "座席%d执行签入:分机%d,ACD服务器的id=%d(用于以后的主备),地址%s,端口号%d",
  98. m_pAgentClient->m_nAgentNumber,
  99. m_pAgentClient->m_nAgentExtension,
  100. m_pAgentClient->m_firstAcdServer.m_nAcdServerId,
  101. m_pAgentClient->m_firstAcdServer.m_sAcdServerIpAddr.GetBuffer(),
  102. m_pAgentClient->m_firstAcdServer.m_nAcdServerPort );
  103. // 记得对CString进行ReleaseBuffer操作
  104. m_pAgentClient->m_firstAcdServer.m_sAcdServerIpAddr.ReleaseBuffer();
  105. }
  106. /*****************************************************************
  107. **【函数名称】 Logout
  108. **【函数功能】 签出
  109. **【参数】
  110. **【返回值】
  111. ****************************************************************/
  112. void CAgentOp::Logout()
  113. {
  114. // 打包命令并发送
  115. CPduEntity cmd(PDU_CMD_AGENT_LOGOUT);
  116. ErrorCode nErrCode;
  117. if (!SendCmdAgentOp(&cmd, nErrCode))
  118. {
  119. m_pAgentClient->GetEventManager()->Fire_Evt_LogOut(false, nErrCode);
  120. return;
  121. }
  122. // 关闭Socket连接
  123. if(!m_pAgentClient->CloseClient())
  124. {
  125. m_pAgentClient->SetErrorCode( ERR_CLOSE_SOCKET );
  126. m_pAgentClient->GetEventManager()->Fire_Evt_SysError( ERR_CLOSE_SOCKET );
  127. m_pAgentClient->GetEventManager()->Fire_Evt_LogOut(false, ERR_CLOSE_SOCKET);
  128. return;
  129. }
  130. // 签出成功
  131. m_pAgentClient->GetEventManager()->Fire_Evt_LogOut( true, 0 );
  132. m_pAgentClient->GetAgentLog()->Log( "ACD返回执行结果:Cmd_Agent_Acd_LogOut 成功" );
  133. // 坐席信息反初始化
  134. m_pAgentClient->m_nAgentState = AGENT_STATE_LOGOUT;
  135. m_pAgentClient->GetEventManager()->Fire_Evt_AgentStateChanged( m_pAgentClient->m_nAgentState );
  136. m_pAgentClient->m_nAgentLineState = INNER_STATE_DISABLED;
  137. m_pAgentClient->GetEventManager()->Fire_Evt_AgentLineStateChanged( m_pAgentClient->m_nAgentLineState );
  138. // 触发连接断开事件
  139. m_pAgentClient->m_nAgentLinkState = PDU_LINK_STATE_DISCONNECTED;
  140. m_pAgentClient->GetEventManager()->Fire_Evt_AgentLinkStateChanged(PDU_LINK_STATE_DISCONNECTED);
  141. }
  142. // 异步,置忙
  143. void CAgentOp::SayBusy(int a_nBusyType)
  144. {
  145. if (m_pAgentClient->GetAgentState() == AGENT_STATE_BUSY)
  146. {
  147. m_pAgentClient->GetEventManager()->Fire_Evt_SayBusy(false, ERR_SAY_BUSY);
  148. return;
  149. }
  150. // 打包命令并发送
  151. CPduEntity cmd(PDU_CMD_AGENT_SETSTATE);
  152. cmd.SetDataUInt(3, AGENT_STATE_REPOSE);
  153. ErrorCode nErrCode;
  154. if (!SendCmdAgentOp(&cmd, nErrCode))
  155. {
  156. m_pAgentClient->GetEventManager()->Fire_Evt_SayBusy(false, nErrCode);
  157. }
  158. }
  159. // 异步,置闲
  160. void CAgentOp::SayFree()
  161. {
  162. // 打包命令并发送
  163. CPduEntity cmd(PDU_CMD_AGENT_SETSTATE);
  164. cmd.SetDataUInt(3, AGENT_STATE_FREE);
  165. ErrorCode nErrCode;
  166. if (!SendCmdAgentOp(&cmd, nErrCode))
  167. {
  168. m_pAgentClient->GetEventManager()->Fire_Evt_SayFree( false, nErrCode);
  169. }
  170. }
  171. // 异步,重置座席
  172. void CAgentOp::ResetAgent()
  173. {
  174. // 打包命令并发送
  175. CPduEntity cmd(PDU_CMD_AGENT_RESET);
  176. ErrorCode nErrCode;
  177. if (!SendCmdAgentOp(&cmd, nErrCode))
  178. {
  179. m_pAgentClient->GetEventManager()->Fire_Evt_ResetAgent( false, nErrCode);
  180. return;
  181. }
  182. m_pAgentClient->GetEventManager()->Fire_Evt_ResetAgent( true, 0 );
  183. }
  184. // 异步,外拨,目前只提供异步的外拨接口
  185. void CAgentOp::MakeCall(CString a_sTelNum, CString a_sCallerNum)
  186. {
  187. ErrorCode nErrCode;
  188. // 对号码进行校验
  189. if(!CheckDestNum(a_sTelNum, nErrCode))
  190. {
  191. m_pAgentClient->GetEventManager()->Fire_Evt_MakeCall(false,
  192. 0,
  193. a_sTelNum,
  194. 0,
  195. nErrCode);
  196. return;
  197. }
  198. // 命令打包发送
  199. CPduEntity cmd(PDU_CMD_AGENT_MAKECALL);
  200. cmd.SetDataString(4, a_sTelNum);
  201. cmd.SetDataString(5, a_sCallerNum);
  202. if (!SendCmdAgentOp(&cmd, nErrCode))
  203. {
  204. m_pAgentClient->GetEventManager()->Fire_Evt_MakeCall( false,
  205. 0,
  206. a_sTelNum,
  207. 0,
  208. nErrCode);
  209. return;
  210. }
  211. // 保存外部号码
  212. m_pAgentClient->m_sOuterNumber = a_sTelNum;
  213. }
  214. // 异步,扩展外拨
  215. void CAgentOp::MakeCallEx(CString a_sTelNum, long a_nType)
  216. {
  217. }
  218. // 异步,预览外拨
  219. void CAgentOp::PreviewMakeCall( CString a_sTelNumList)
  220. {
  221. }
  222. // 异步,应答
  223. void CAgentOp::AnswerCall()
  224. {
  225. // 打包命令并发送
  226. CPduEntity cmd(PDU_CMD_AGENT_ANSWER);
  227. ErrorCode nErrCode;
  228. if (!SendCmdAgentOp(&cmd, nErrCode))
  229. {
  230. m_pAgentClient->GetEventManager()->Fire_Evt_AnswerCall( false, m_pAgentClient->m_nCallID, nErrCode);
  231. }
  232. }
  233. // 异步,挂机
  234. void CAgentOp::DropCall()
  235. {
  236. // 打包命令并发送
  237. CPduEntity cmd(PDU_CMD_AGENT_HANGUP);
  238. ErrorCode nErrCode;
  239. if (!SendCmdAgentOp(&cmd, nErrCode))
  240. {
  241. m_pAgentClient->GetEventManager()->Fire_Evt_DropCall( false, 1, m_pAgentClient->m_nCallID, nErrCode);
  242. }
  243. }
  244. // 异步,取消
  245. void CAgentOp::Cancel()
  246. {
  247. // 打包命令并发送
  248. CPduEntity cmd(PDU_CMD_AGENT_CANCEL);
  249. ErrorCode nErrCode;
  250. if (!SendCmdAgentOp(&cmd, nErrCode))
  251. {
  252. m_pAgentClient->GetEventManager()->Fire_Evt_Cancel( false, m_pAgentClient->m_nCallID, nErrCode);
  253. }
  254. }
  255. // 保持
  256. void CAgentOp::Hold()
  257. {
  258. // 打包命令并发送
  259. CPduEntity cmd(PDU_CMD_AGENT_HOLD);
  260. ErrorCode nErrCode;
  261. if (!SendCmdAgentOp(&cmd, nErrCode))
  262. {
  263. m_pAgentClient->GetEventManager()->Fire_Evt_Hold( false, m_pAgentClient->m_nCallID, nErrCode);
  264. }
  265. }
  266. // 接回
  267. void CAgentOp::TakeBack()
  268. {
  269. // 打包命令并发送
  270. CPduEntity cmd(PDU_CMD_AGENT_TAKEBACK);
  271. ErrorCode nErrCode;
  272. if (!SendCmdAgentOp(&cmd, nErrCode))
  273. {
  274. m_pAgentClient->GetEventManager()->Fire_Evt_UnHold( false, 0, nErrCode);
  275. }
  276. }
  277. // 转移
  278. void CAgentOp::Transfer(CString a_sTelNum, CString a_sCallerNum)
  279. {
  280. ErrorCode nErrCode;
  281. // 对号码进行校验
  282. if(!CheckDestNum(a_sTelNum, nErrCode))
  283. {
  284. m_pAgentClient->GetEventManager()->Fire_Evt_Transfer(false, m_pAgentClient->m_nCallID, nErrCode);
  285. return;
  286. }
  287. // 命令打包发送
  288. CPduEntity cmd(PDU_CMD_AGENT_TRANSTALK);
  289. cmd.SetDataString(3, a_sTelNum);
  290. cmd.SetDataString(4, a_sCallerNum);
  291. if (!SendCmdAgentOp(&cmd, nErrCode))
  292. {
  293. m_pAgentClient->GetEventManager()->Fire_Evt_Transfer(false, m_pAgentClient->m_nCallID, nErrCode);
  294. return;
  295. }
  296. // 保存外部号码
  297. m_pAgentClient->m_sOuterNumber = a_sTelNum;
  298. }
  299. // 三方
  300. void CAgentOp::Meeting(CString a_sTelNum, CString a_sCallerNum)
  301. {
  302. ErrorCode nErrCode;
  303. // 对号码进行校验
  304. if(!CheckDestNum(a_sTelNum, nErrCode))
  305. {
  306. m_pAgentClient->GetEventManager()->Fire_Evt_ThreeTalk(false, m_pAgentClient->m_nCallID, nErrCode);
  307. return;
  308. }
  309. // 命令打包发送
  310. CPduEntity cmd(PDU_CMD_AGENT_THREETALK);
  311. cmd.SetDataString(3, a_sTelNum);
  312. cmd.SetDataString(4, a_sCallerNum);
  313. if (!SendCmdAgentOp(&cmd, nErrCode))
  314. {
  315. m_pAgentClient->GetEventManager()->Fire_Evt_ThreeTalk(false, m_pAgentClient->m_nCallID, nErrCode);
  316. return;
  317. }
  318. // 保存外部号码
  319. m_pAgentClient->m_sOuterNumber = a_sTelNum;
  320. }
  321. // 取消转移
  322. void CAgentOp::CancelTransfer()
  323. {
  324. // 打包命令并发送
  325. CPduEntity cmd(PDU_CMD_AGENT_CANCEL);
  326. ErrorCode nErrCode;
  327. if (!SendCmdAgentOp(&cmd, nErrCode))
  328. {
  329. m_pAgentClient->GetEventManager()->Fire_Evt_Cancel( false, m_pAgentClient->m_nCallID, nErrCode);
  330. }
  331. }
  332. // 取消三方
  333. void CAgentOp::CancelMeeting()
  334. {
  335. // 打包命令并发送
  336. CPduEntity cmd(PDU_CMD_AGENT_CANCEL);
  337. ErrorCode nErrCode;
  338. if (!SendCmdAgentOp(&cmd, nErrCode))
  339. {
  340. m_pAgentClient->GetEventManager()->Fire_Evt_Cancel( false, m_pAgentClient->m_nCallID, nErrCode);
  341. }
  342. }
  343. // 协商呼叫
  344. void CAgentOp::Consult(CString a_sTelNum, CString a_sCallerNum)
  345. {
  346. ErrorCode nErrCode;
  347. // 对号码进行校验
  348. if(!CheckDestNum(a_sTelNum, nErrCode))
  349. {
  350. m_pAgentClient->GetEventManager()->Fire_Evt_Consult(false, 0, nErrCode);
  351. return;
  352. }
  353. // 命令打包发送
  354. CPduEntity cmd(PDU_CMD_AGENT_CONSULTATION_CALL);
  355. cmd.SetDataString(4, a_sTelNum);
  356. cmd.SetDataString(5, a_sCallerNum);
  357. if (!SendCmdAgentOp(&cmd, nErrCode))
  358. {
  359. m_pAgentClient->GetEventManager()->Fire_Evt_Consult(false, 0, nErrCode);
  360. return;
  361. }
  362. // 保存外部号码
  363. m_pAgentClient->m_sOuterNumber = a_sTelNum;
  364. }
  365. // 确认转移
  366. void CAgentOp::Confirm(long a_nType)
  367. {
  368. ErrorCode nErrCode;
  369. // 打包命令并发送
  370. CPduEntity cmd(PDU_CMD_AGENT_CONFIRM_TRANSFER);
  371. cmd.SetDataUInt(3, a_nType); // 协商呼叫完成方式
  372. if (!SendCmdAgentOp(&cmd, nErrCode))
  373. {
  374. m_pAgentClient->GetEventManager()->Fire_Evt_Confirm( false, 0, nErrCode);
  375. return;
  376. }
  377. }
  378. // 操作接口:代接
  379. void CAgentOp::Instead(long a_nTelNum)
  380. {
  381. ErrorCode nErrCode;
  382. CString a_sTelNum;
  383. a_sTelNum.Format("%ld", a_nTelNum);
  384. // 对号码进行校验
  385. if(!CheckDestNum(a_sTelNum, nErrCode))
  386. {
  387. m_pAgentClient->GetEventManager()->Fire_Evt_Instead(false, m_pAgentClient->m_nCallID, nErrCode);
  388. return;
  389. }
  390. // 命令打包发送
  391. CPduEntity cmd(PDU_CMD_AGENT_MONI_REPLACE);
  392. cmd.SetDataUInt(4, (unsigned int)a_nTelNum);
  393. if (!SendCmdAgentOp(&cmd, nErrCode))
  394. {
  395. m_pAgentClient->GetEventManager()->Fire_Evt_Instead(false, m_pAgentClient->m_nCallID, nErrCode);
  396. return;
  397. }
  398. // 保存外部号码
  399. m_pAgentClient->m_sOuterNumber = a_sTelNum;
  400. }
  401. // 操作接口:监听座席
  402. void CAgentOp::Listen(long a_nTelNum)
  403. {
  404. CString a_sTelNum;
  405. a_sTelNum.Format("%ld", a_nTelNum);
  406. ErrorCode nErrCode;
  407. // 对号码进行校验
  408. if(!CheckDestNum(a_sTelNum, nErrCode))
  409. {
  410. m_pAgentClient->GetEventManager()->Fire_Evt_ListenAgent(false, m_pAgentClient->m_nCallID, nErrCode);
  411. return;
  412. }
  413. // 命令打包发送
  414. CPduEntity cmd(PDU_CMD_AGENT_MONI_LISTEN);
  415. cmd.SetDataUInt(4, (unsigned int)a_nTelNum);
  416. if (!SendCmdAgentOp(&cmd, nErrCode))
  417. {
  418. m_pAgentClient->GetEventManager()->Fire_Evt_ListenAgent(false, m_pAgentClient->m_nCallID, nErrCode);
  419. return;
  420. }
  421. // 保存外部号码
  422. m_pAgentClient->m_sOuterNumber = a_sTelNum;
  423. }
  424. // 强插座席
  425. void CAgentOp::Insert(long a_nTelNum)
  426. {
  427. ErrorCode nErrCode;
  428. CString a_sTelNum;
  429. a_sTelNum.Format("%ld", a_nTelNum);
  430. // 对号码进行校验
  431. if(!CheckDestNum(a_sTelNum, nErrCode))
  432. {
  433. m_pAgentClient->GetEventManager()->Fire_Evt_InsertAgent(false, m_pAgentClient->m_nCallID, nErrCode);
  434. return;
  435. }
  436. // 命令打包发送
  437. CPduEntity cmd(PDU_CMD_AGENT_MONI_INSERT);
  438. cmd.SetDataUInt(4, (unsigned int)a_nTelNum);
  439. if (!SendCmdAgentOp(&cmd, nErrCode))
  440. {
  441. m_pAgentClient->GetEventManager()->Fire_Evt_InsertAgent(false, m_pAgentClient->m_nCallID, nErrCode);
  442. return;
  443. }
  444. // 保存外部号码
  445. m_pAgentClient->m_sOuterNumber = a_sTelNum;
  446. }
  447. // 操作接口:强截座席
  448. void CAgentOp::Intercept(long a_nTelNum)
  449. {
  450. ErrorCode nErrCode;
  451. CString a_sTelNum;
  452. a_sTelNum.Format("%ld", a_nTelNum);
  453. // 对号码进行校验
  454. if(!CheckDestNum(a_sTelNum, nErrCode))
  455. {
  456. m_pAgentClient->GetEventManager()->Fire_Evt_InterceptAgent(false, m_pAgentClient->m_nCallID, nErrCode);
  457. return;
  458. }
  459. // 命令打包发送
  460. CPduEntity cmd(PDU_CMD_AGENT_MONI_INTERCEPT);
  461. cmd.SetDataUInt(4, (unsigned int)a_nTelNum);
  462. if (!SendCmdAgentOp(&cmd, nErrCode))
  463. {
  464. m_pAgentClient->GetEventManager()->Fire_Evt_InterceptAgent(false, m_pAgentClient->m_nCallID, nErrCode);
  465. return;
  466. }
  467. // 保存外部号码
  468. m_pAgentClient->m_sOuterNumber = a_sTelNum;
  469. }
  470. // 操作接口:强拆座席
  471. void CAgentOp::Break(long a_nTelNum)
  472. {
  473. ErrorCode nErrCode;
  474. CString a_sTelNum;
  475. a_sTelNum.Format("%ld", a_nTelNum);
  476. // 对号码进行校验
  477. if(!CheckDestNum(a_sTelNum, nErrCode))
  478. {
  479. m_pAgentClient->GetEventManager()->Fire_Evt_CutAgent(false, m_pAgentClient->m_nCallID, nErrCode);
  480. return;
  481. }
  482. // 命令打包发送
  483. CPduEntity cmd(PDU_CMD_AGENT_MONI_CUT);
  484. cmd.SetDataUInt(4, (unsigned int)a_nTelNum);
  485. if (!SendCmdAgentOp(&cmd, nErrCode))
  486. {
  487. m_pAgentClient->GetEventManager()->Fire_Evt_CutAgent(false, m_pAgentClient->m_nCallID, nErrCode);
  488. return;
  489. }
  490. // 保存外部号码
  491. m_pAgentClient->m_sOuterNumber = a_sTelNum;
  492. }
  493. // 操作接口:发送传真
  494. void CAgentOp::SendFax(CString a_sFilePath)
  495. {
  496. CPduEntity cmd(PDU_CMD_AGENT_FAX);
  497. cmd.SetDataUInt(4, 0);
  498. cmd.SetDataString(5, a_sFilePath);
  499. ErrorCode nErrCode;
  500. if (!SendCmdAgentOp(&cmd, nErrCode))
  501. {
  502. m_pAgentClient->GetEventManager()->Fire_Evt_SendFax( false, m_pAgentClient->m_nCallID, nErrCode);
  503. }
  504. }
  505. // 操作接口:接收传真
  506. void CAgentOp::RecvFax(CString a_sRecvFilePath)
  507. {
  508. CPduEntity cmd(PDU_CMD_AGENT_FAX);
  509. cmd.SetDataUInt(4, 1);
  510. cmd.SetDataString(5, a_sRecvFilePath);
  511. ErrorCode nErrCode;
  512. if (!SendCmdAgentOp(&cmd, nErrCode))
  513. {
  514. m_pAgentClient->GetEventManager()->Fire_Evt_RecvFax( false, m_pAgentClient->m_nCallID, nErrCode);
  515. }
  516. }
  517. // 操作接口:转移到指定IVR
  518. void CAgentOp::TransferToIvr(CString a_sIvrFilePath, long a_nNode, BOOL a_bNeedReturn, CString a_sAssociateData)
  519. {
  520. CPduEntity cmd(PDU_CMD_AGENT_TURN_TO_IVR);
  521. cmd.SetDataUInt(5, a_nNode);
  522. cmd.SetDataString(6, a_sIvrFilePath);
  523. cmd.SetDataString(7, a_sAssociateData);
  524. cmd.SetDataBool(8, a_bNeedReturn == TRUE ? true:false);
  525. ErrorCode nErrCode;
  526. if (!SendCmdAgentOp(&cmd, nErrCode))
  527. {
  528. m_pAgentClient->GetEventManager()->Fire_Evt_TransferToIvr( false, m_pAgentClient->m_nCallID, nErrCode);
  529. }
  530. }
  531. // 强制签出
  532. void CAgentOp::ForceAgentLogOut(long a_nTelNum, CString a_sReason)
  533. {
  534. ErrorCode nErrCode;
  535. CString a_sTelNum;
  536. a_sTelNum.Format("%ld", a_nTelNum);
  537. // 对号码进行校验
  538. if(!CheckDestNum(a_sTelNum, nErrCode))
  539. {
  540. m_pAgentClient->GetEventManager()->Fire_Evt_ForceLogOut(false, nErrCode);
  541. return;
  542. }
  543. CPduEntity cmd(PDU_CMD_AGENT_MONI_FORCE_LOGOUT);
  544. cmd.SetDataUInt(4, (unsigned int)a_nTelNum);
  545. cmd.SetDataString(5, a_sReason);
  546. if (!SendCmdAgentOp(&cmd, nErrCode))
  547. {
  548. m_pAgentClient->GetEventManager()->Fire_Evt_ForceLogOut( false, nErrCode);
  549. }
  550. }
  551. // 强制控制状态
  552. void CAgentOp::ForceAgentState(long a_nTelNum, int nState)
  553. {
  554. ErrorCode nErrCode;
  555. CString a_sTelNum;
  556. a_sTelNum.Format("%ld", a_nTelNum);
  557. // 对号码进行校验
  558. if(!CheckDestNum(a_sTelNum, nErrCode))
  559. {
  560. m_pAgentClient->GetEventManager()->Fire_Evt_ForceControlAgent( false, m_pAgentClient->m_nCallID, nErrCode);
  561. return;
  562. }
  563. CPduEntity cmd(PDU_CMD_AGENT_MONI_FORCE_STATE);
  564. cmd.SetDataUInt(4, (unsigned int)a_nTelNum);
  565. cmd.SetDataUInt(5, (unsigned int)nState);
  566. if (!SendCmdAgentOp(&cmd, nErrCode))
  567. {
  568. m_pAgentClient->GetEventManager()->Fire_Evt_ForceControlAgent( false, m_pAgentClient->m_nCallID, nErrCode);
  569. }
  570. }
  571. /*****************************************************************
  572. **【函数名称】 MuteOn
  573. **【函数功能】 开始静音
  574. **【参数】
  575. **【返回值】
  576. ****************************************************************/
  577. void CAgentOp::MuteOn()
  578. {
  579. // 打包命令并发送
  580. CPduEntity cmd(PDU_CMD_AGENT_MUTE);
  581. cmd.SetDataUInt(3, 0);
  582. ErrorCode nErrCode;
  583. if (!SendCmdAgentOp(&cmd, nErrCode))
  584. {
  585. m_pAgentClient->GetEventManager()->Fire_Evt_BeginMute( false, m_pAgentClient->m_nCallID, nErrCode);
  586. }
  587. }
  588. /*****************************************************************
  589. **【函数名称】 MuteOff
  590. **【函数功能】 结束静音
  591. **【参数】
  592. **【返回值】
  593. ****************************************************************/
  594. void CAgentOp::MuteOff()
  595. {
  596. // 打包命令并发送
  597. CPduEntity cmd(PDU_CMD_AGENT_MUTE);
  598. cmd.SetDataUInt(3, 1);
  599. ErrorCode nErrCode;
  600. if (!SendCmdAgentOp(&cmd, nErrCode))
  601. {
  602. m_pAgentClient->GetEventManager()->Fire_Evt_EndMute( false, m_pAgentClient->m_nCallID, nErrCode);
  603. }
  604. }