中间件底层,websocket

OpTransfer.cpp 3.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. #include "StdAfx.h"
  2. #include "OpTransfer.h"
  3. #include "VirtualChan.h"
  4. #include "OperationReactor.h"
  5. #include "FsProxy.h"
  6. COpTransfer::COpTransfer(COperationReactor* pParent, LONG Instance) : COperation(pParent, Instance), m_pHostExtChan(NULL)
  7. {
  8. }
  9. COpTransfer::~COpTransfer(void)
  10. {
  11. }
  12. /*****************************************************************
  13. **【函数名称】 _end
  14. **【函数功能】 操作完成
  15. **【参数】 IsSucceed 操作是否成功
  16. lpData 随路数据
  17. **【返回值】
  18. ****************************************************************/
  19. void COpTransfer::_end( bool IsSucceed )
  20. {
  21. if(IsSucceed)
  22. {
  23. LOGGER(LOG_LEVEL_NORMAL, _T("{OpTransfer}: 分机[%lu]转移成功, DestNum = %s"), m_pHostExtChan->no(), m_DestNumber);
  24. }
  25. else
  26. {
  27. LOGGER(LOG_LEVEL_WARNING, _T("{OpTransfer}: 分机[%lu]转移失败, DestNum = %s"), m_pHostExtChan->no(), m_DestNumber);
  28. }
  29. // 返回执行结果
  30. if(m_InstanceCancel != FS_LINK_INSTANCE_INVALID)
  31. m_pParent->onOpResult(m_InstanceCancel, !IsSucceed);
  32. m_pParent->onOpResult(m_Instance, this, IsSucceed);
  33. }
  34. /*****************************************************************
  35. **【函数名称】 start
  36. **【函数功能】 执行操作
  37. **【参数】
  38. **【返回值】
  39. *****************************************************************/
  40. bool COpTransfer::start( LineOpParam* pParam )
  41. {
  42. // 校验状态
  43. if(m_pHostChan->state() != CHAN_LOGIC_STATE_TALKING)
  44. return false;
  45. // 获取待转移的通道
  46. CVirtualChan* pDestChan = CFsProxy::GetInstance().getAssoChanInSession(m_pHostChan);
  47. if(pDestChan == NULL || pDestChan->currOp() != NULL)
  48. return false;
  49. // 保存被叫信息
  50. CString CallerNum = pParam->szParam1;
  51. m_DestNumber = pParam->szParam2;
  52. m_pHostExtChan = m_pHostChan;
  53. detachHostChan();
  54. attachHostChan(pDestChan);
  55. // 通知启动日志
  56. LOGGER(LOG_LEVEL_NORMAL, _T("{OpConsult}: 分机[%lu]执行转移, DestNum = %s"), m_pHostExtChan->no(), m_DestNumber);
  57. return CFsProxy::GetInstance().transfer(uniqueId(), pDestChan, m_DestNumber);
  58. }
  59. /*****************************************************************
  60. **【函数名称】 onBackgroudJobDone
  61. **【函数功能】 后台命令执行结束事件处理
  62. **【参数】
  63. **【返回值】
  64. *****************************************************************/
  65. void COpTransfer::onBackgroudJobDone( PBG_JOB_NOTIFY pNotify )
  66. {
  67. if(strstr(pNotify->JobBody, ESL_JOB_DONE_RES_FAILED) != NULL)
  68. _end(false);
  69. }
  70. void COpTransfer::onHostChanStateUpdated(CVirtualChan * pHostChan)
  71. {
  72. if (m_pHostChan->state() == CHAN_LOGIC_STATE_FREE)
  73. _end(false);
  74. }
  75. /*****************************************************************
  76. **【函数名称】 onSessionChanStateUpdated
  77. **【函数功能】 同会话中通道状态更新处理
  78. **【参数】
  79. **【返回值】
  80. *****************************************************************/
  81. void COpTransfer::onSessionChanStateUpdated( CVirtualChan* pChan )
  82. {
  83. if(pChan == m_pHostExtChan)
  84. return;
  85. switch(pChan->state())
  86. {
  87. case CHAN_LOGIC_STATE_RING_BACK:
  88. case CHAN_LOGIC_STATE_ALERTING:
  89. m_pParent->onOpProcess(m_Instance, m_pHostChan->no(), pChan->no(), pChan->type(), pChan->callerNum(), pChan->calleeNum());
  90. break;
  91. case CHAN_LOGIC_STATE_TALKING:
  92. _end(true);
  93. break;
  94. case CHAN_LOGIC_STATE_FREE:
  95. _end(false);
  96. }
  97. }