中间件底层,websocket

TaskIvrContinueQuene.cpp 4.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. #include "stdafx.h"
  2. #include "TaskIvrContinueQuene.h"
  3. #include "LineHolder.h"
  4. #include "LogicLine.h"
  5. #include "IvrFlowHolder.h"
  6. #include "IvrFlow.h"
  7. #include "NetworkCti.h"
  8. #include "CtiCore.h"
  9. #include <iostream>
  10. CTaskIvrContinueQuene::CTaskIvrContinueQuene(CPduEntity &PduEntity): CTask(PduEntity), m_Step(0)
  11. {
  12. }
  13. CTaskIvrContinueQuene::~CTaskIvrContinueQuene(void)
  14. {
  15. }
  16. /*****************************************************************
  17. **【函数名称】 DoTask
  18. **【函数功能】 Task处理
  19. **【参数】
  20. **【返回值】 void
  21. ****************************************************************/
  22. BOOL CTaskIvrContinueQuene::DoTask()
  23. {
  24. // 显示日志
  25. ShowLog();
  26. // 校验
  27. if(!Verify()) return FALSE;
  28. // 设置当前操作类型
  29. if (m_pCurrLine == NULL) {
  30. return FALSE;
  31. }
  32. m_pCurrLine->opType() = PDU_CMD_IVR_QUEUE_CONTINUE;
  33. // 设备操作
  34. LineOpParam pLineOpParam;
  35. memset(&pLineOpParam,0,sizeof(pLineOpParam));
  36. lstrcpy(pLineOpParam.szParam3,m_CurrCmd.GetDataString(5)); // 等待放音文件名
  37. pLineOpParam.nParam1 = PVM_PLAY_ONLY; // 1放音收号 2 只放音不收号
  38. return CCtiCore::GetInstance().getDevLink().exec((long)this, LINE_OP_PLAY_VOICE, m_pCurrLine->lineId(), &pLineOpParam);
  39. }
  40. /*****************************************************************
  41. **【函数名称】 Verify
  42. **【函数功能】 校验
  43. **【参数】
  44. **【返回值】 BOOL
  45. ****************************************************************/
  46. BOOL CTaskIvrContinueQuene::Verify()
  47. {
  48. // 线路绑定校验
  49. if(!_bindLogicLine(m_CurrCmd.GetDataUInt(3)))
  50. return FALSE;
  51. // 放音内容校验
  52. if(m_CurrCmd.GetDataString(5) == "")
  53. {
  54. ILogger::getInstance().log(LOG_CLASS_BUSI, LOG_LEVEL_WARNING, _T("{Task}: 线路[%d]执行IVR继续等待排队任务校验时失败:等待提示音文件为空"), m_pCurrLine->lineId());
  55. return FALSE;
  56. }
  57. return TRUE;
  58. }
  59. /*****************************************************************
  60. **【函数名称】 ShowLog
  61. **【函数功能】 显示日志
  62. **【参数】
  63. **【返回值】 void
  64. ****************************************************************/
  65. void CTaskIvrContinueQuene::ShowLog()
  66. {
  67. // 显示日志
  68. ILogger::getInstance().log(LOG_CLASS_SOCKET, LOG_LEVEL_NORMAL, _T("IVR->CTI, CMD = [IVR继续排队], \
  69. IVR = %d, Line = %u, CallerNum = %s, FileName = %s"),
  70. m_CurrCmd.GetDataInt(1),
  71. m_CurrCmd.GetDataUInt(3),
  72. m_CurrCmd.GetDataString(4),
  73. m_CurrCmd.GetDataString(5));
  74. }
  75. /*****************************************************************
  76. **【函数名称】 OnDevOpResult
  77. **【函数功能】 底层线路操作结果
  78. **【参数】
  79. **【返回值】 void
  80. ****************************************************************/
  81. BOOL CTaskIvrContinueQuene::OnDevOpResult(EventOpResult &EvtInfo)
  82. {
  83. ILogger::getInstance().log(LOG_CLASS_BUSI, LOG_LEVEL_NORMAL, _T("IVR->CTI, CMD = [IVR继续排队], \
  84. nInstance = %d, nHostLine = %u, bIsSucceed = %d, szData = %s, m_Step = %d"),
  85. EvtInfo.nInstance, EvtInfo.nHostLine, EvtInfo.bIsSucceed, EvtInfo.szData,m_Step);
  86. if(m_Step == 0)
  87. {
  88. // 向ACD发暂停排队命令
  89. CPduEntity CmdPauseQueue(PDU_CMD_CTI_ACD_QUEUE_PAUSE);
  90. CmdPauseQueue.SetDataInt(0, m_CurrCmd.GetDataInt(1));
  91. CNetworkCti::GetInstance().send2ACD(CmdPauseQueue);
  92. // 命令返回
  93. _ProcCmdReturn(FALSE, true);
  94. }
  95. return FALSE;
  96. }
  97. /*****************************************************************
  98. **【函数名称】 OnCmdOperation
  99. **【函数功能】 task附加操作处理接口
  100. **【参数】 命令
  101. **【返回值】 void
  102. ****************************************************************/
  103. BOOL CTaskIvrContinueQuene::OnCmdOperation(CPduEntity &PduEntity)
  104. {
  105. // 设置排队成功标志
  106. if(PduEntity.GetCmdType() != PDU_CMD_IVR_QUEUE_CONTINUE) return FALSE;
  107. if(!PduEntity.GetIsExecReturn()) return FALSE;
  108. if(!PduEntity.GetDataBool(0)) return FALSE;
  109. m_Step = 1;
  110. int nIvrIndex = -1;
  111. int nLine = -1;
  112. __try
  113. {
  114. // 发送停止放音
  115. LineOpParam pLineOpParam;
  116. memset(&pLineOpParam, 0, sizeof(pLineOpParam));
  117. pLineOpParam.nParam1 = PVM_STOP_PLAY;
  118. CCtiCore::GetInstance().getDevLink().exec((long)NULL, LINE_OP_PLAY_VOICE, m_pCurrLine->lineId(), &pLineOpParam); // 执行标识置为NULL,即不需等待底层的执行结果
  119. //Sleep(200);
  120. nIvrIndex = m_CurrCmd.GetDataInt(1);
  121. nLine = m_CurrCmd.GetDataUInt(3);
  122. // 获取返回命令信息 分配的坐席工号,分机号
  123. m_CurrCmd.SetDataUInt(7, PduEntity.GetDataUInt(7));
  124. m_CurrCmd.SetDataUInt(8, PduEntity.GetDataUInt(8));
  125. Sleep(300);
  126. // 命令返回,并释放占用的线路
  127. _ProcCmdReturn(TRUE, true);
  128. }
  129. __except (EXCEPTION_EXECUTE_HANDLER)
  130. {
  131. ILogger::getInstance().log(LOG_CLASS_BUSI, LOG_LEVEL_ERROR, _T("IVR->CTI, CMD = [IVR继续排队], \
  132. IVR = %d, Line = %u, 异常信息"),
  133. nIvrIndex,
  134. nLine);
  135. }
  136. return TRUE;
  137. }