中间件标准版5.1git,去除基础模块

TaskMonitorGrab.cpp 3.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. #include "stdafx.h"
  2. #include "TaskMonitorGrab.h"
  3. #include "LineHolder.h"
  4. #include "LogicLine.h"
  5. #include "SessionHolder.h"
  6. #include "CallSession.h"
  7. #include "CtiCore.h"
  8. CTaskMonitorGrab::CTaskMonitorGrab(CPduEntity &PduEntity) : CTask(PduEntity)
  9. {
  10. }
  11. CTaskMonitorGrab::~CTaskMonitorGrab(void)
  12. {
  13. }
  14. /*****************************************************************
  15. **【函数名称】 DoTask
  16. **【函数功能】 Task处理
  17. **【参数】
  18. **【返回值】 void
  19. ****************************************************************/
  20. BOOL CTaskMonitorGrab::DoTask()
  21. {
  22. // 显示日志
  23. ShowLog();
  24. // 校验
  25. if(!Verify())
  26. return FALSE;
  27. m_pCurrLine->opType() = PDU_CMD_AGENT_MONI_INTERCEPT;
  28. // 发给设备强截
  29. LineOpParam pLineOpParam;
  30. memset(&pLineOpParam,0,sizeof(pLineOpParam));
  31. sprintf_s(pLineOpParam.szParam2, PHONE_NUM_LEN, "%u", m_CurrCmd.GetDataUInt(3));
  32. return CCtiCore::GetInstance().getDevLink().exec((long)this, LINE_OP_GRAB, m_pCurrLine->lineId(), &pLineOpParam);
  33. }
  34. /*****************************************************************
  35. **【函数名称】 Verify
  36. **【函数功能】 校验
  37. **【参数】
  38. **【返回值】 BOOL
  39. ****************************************************************/
  40. BOOL CTaskMonitorGrab::Verify()
  41. {
  42. // 线路绑定校验
  43. if(!_bindLogicLine(m_CurrCmd.GetDataUInt(1)))
  44. return FALSE;
  45. // 本端状态校验
  46. if((m_pCurrLine->status() & 0xFF) != INNER_STATE_INIT &&
  47. (m_pCurrLine->status() & 0xFF) != INNER_STATE_FREE)
  48. {
  49. ILogger::getInstance().log(LOG_CLASS_BUSI, LOG_LEVEL_WARNING, _T("{Task}: 线路[%d]执行座席强截任务校验时失败:当前线路状态校验不通过"), m_pCurrLine->lineId());
  50. return FALSE;
  51. }
  52. // 对端线路状态验证
  53. CLogicLine *pAssoLine = CLineHolder::GetInstance().getLogicLine(m_CurrCmd.GetDataUInt(3));
  54. if(pAssoLine == NULL || pAssoLine->status() != INNER_STATE_TALKING)
  55. {
  56. ILogger::getInstance().log(LOG_CLASS_BUSI, LOG_LEVEL_WARNING, _T("{Task}: 线路[%d]执行座席强截任务校验时失败:关联线路状态校验不通过"), m_pCurrLine->lineId());
  57. return FALSE;
  58. }
  59. // 设置线路关联的CallId
  60. m_pCurrLine->callId() = pAssoLine->callId();
  61. return TRUE;
  62. }
  63. /*****************************************************************
  64. **【函数名称】 ShowLog
  65. **【函数功能】 显示日志
  66. **【参数】
  67. **【返回值】 void
  68. ****************************************************************/
  69. void CTaskMonitorGrab::ShowLog()
  70. {
  71. // 显示日志
  72. ILogger::getInstance().log(LOG_CLASS_SOCKET, LOG_LEVEL_NORMAL, _T("AGENT->CTI, CMD = [座席强截], \
  73. Exten = %d, DestNum = %d"),
  74. m_CurrCmd.GetDataUInt(1),
  75. m_CurrCmd.GetDataUInt(3));
  76. }
  77. /*****************************************************************
  78. **【函数名称】 ProcTaskResult
  79. **【函数功能】 处理Pdu命令返回
  80. **【参数】 成功还是失败
  81. **【返回值】 void
  82. ****************************************************************/
  83. BOOL CTaskMonitorGrab::OnDevOpResult(EventOpResult &EvtInfo)
  84. {
  85. // 成功,将该线路加入会话,否则重置
  86. if(EvtInfo.bIsSucceed)
  87. {
  88. CCallSession* pSession = CSessionHolder::GetInstance().findSession(m_pCurrLine->callId());;
  89. if(pSession != NULL) pSession->addLine(m_pCurrLine);
  90. }
  91. else
  92. {
  93. m_pCurrLine->resetLine();
  94. }
  95. // 命令返回
  96. _ProcCmdReturn(EvtInfo.bIsSucceed);
  97. return TRUE;
  98. }