中间件底层,websocket

TaskAgentSendDtmf.cpp 2.5KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. #include "stdafx.h"
  2. #include "TaskAgentSendDtmf.h"
  3. #include "LineHolder.h"
  4. #include "LogicLine.h"
  5. #include "CtiCore.h"
  6. #include "SessionHolder.h"
  7. #include "CallSession.h"
  8. CTaskAgentSendDtmf::CTaskAgentSendDtmf(CPduEntity & PduEntity) : CTask(PduEntity)
  9. {
  10. }
  11. CTaskAgentSendDtmf::~CTaskAgentSendDtmf(void)
  12. {
  13. }
  14. BOOL CTaskAgentSendDtmf::DoTask()
  15. {
  16. // 显示日志
  17. ShowLog();
  18. // 校验
  19. if (!Verify()) return FALSE;
  20. // 设置当前操作类型
  21. if (m_pCurrLine == NULL)return FALSE;
  22. m_pCurrLine->opType() = PDU_CMD_AGENT_SEND_DTMF;
  23. CCallSession* pSession = CSessionHolder::GetInstance().findSession(m_pCurrLine->callId());
  24. if (pSession == NULL || pSession->lineCount() < 3)
  25. {
  26. ILogger::getInstance().log(LOG_CLASS_SOCKET, LOG_LEVEL_NORMAL, _T("AGENT->CTI, CMD = [座席发送按键]失败,该情况下不能进行发送按键操作, Exten = %d"), m_pCurrLine->lineId());
  27. return false;
  28. }
  29. LineOpParam pLineOpParam;
  30. memset(&pLineOpParam, 0, sizeof(pLineOpParam));
  31. pLineOpParam.nParam1 = m_pCurrLine->lineId();
  32. pLineOpParam.nParam2 = pSession->lastLine();
  33. lstrcpy(pLineOpParam.szParam4, m_CurrCmd.GetDataString(3));
  34. ILogger::getInstance().log(LOG_CLASS_SOCKET, LOG_LEVEL_NORMAL, _T("AGENT->CTI, 坐席通道[%lu]开始执行发送通道[%lu]按键[%s]"), m_pCurrLine->lineId(), pSession->lastLine(), pLineOpParam.szParam4);
  35. return CCtiCore::GetInstance().getDevLink().exec((long)this, LINE_OP_SEND_DTMF, pSession->lastLine(), &pLineOpParam);
  36. }
  37. BOOL CTaskAgentSendDtmf::Verify()
  38. {
  39. // 线路绑定校验
  40. if (!_bindLogicLine(m_CurrCmd.GetDataUInt(1)))
  41. return FALSE;
  42. // 本端线路状态校验
  43. if (m_pCurrLine->status() != INNER_STATE_TALKING)
  44. {
  45. ILogger::getInstance().log(LOG_CLASS_BUSI, LOG_LEVEL_WARNING, _T("{Task}: 线路[%d]执行座席发送按键任务校验时失败:当前线路未在通话中"), m_pCurrLine->lineId());
  46. return FALSE;
  47. }
  48. // 对端线路状态验证
  49. CCallSession* pSession = CSessionHolder::GetInstance().findSession(m_pCurrLine->callId());
  50. if (pSession == NULL) return FALSE;
  51. CLogicLine *pAssoLine = CLineHolder::GetInstance().getLogicLine(pSession->lastLine());
  52. if (pAssoLine == NULL || (pAssoLine->status() != INNER_STATE_TALKING && pAssoLine->status() != TRUNK_STATE_TALKING))
  53. {
  54. ILogger::getInstance().log(LOG_CLASS_BUSI, LOG_LEVEL_WARNING, _T("{Task}: 线路[%d]执行座席发送按键任务校验时失败:关联线路[%d]状态校验不通过"), m_pCurrLine->lineId(), pSession->lastLine());
  55. return FALSE;
  56. }
  57. return TRUE;
  58. }
  59. void CTaskAgentSendDtmf::ShowLog()
  60. {
  61. // 显示日志
  62. ILogger::getInstance().log(LOG_CLASS_SOCKET, LOG_LEVEL_NORMAL, _T("AGENT->CTI, CMD = [座席发送按键], Exten = %d"), m_CurrCmd.GetDataUInt(1));
  63. }