MiddleWares_YiHe 郑州颐和医院随访系统中间件

LineRecordIprr.cpp 3.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. #include "StdAfx.h"
  2. #include "LineRecordIprr.h"
  3. #include "Config.h"
  4. #include "IprControl.h"
  5. CLineRecordIprr::CLineRecordIprr(int LineId) : CLine(LineId), m_RecState(REC_STATE_IDLE),
  6. m_StationId(CONST_IPR_STATION_INVALID), m_SessionId(CONST_IPR_SESSION_INVALID), m_SessionCodec(CONST_IPR_CODEC_INVALID),
  7. m_FowardingPPort(0), m_FowardingSPort(0), m_IsSessionActived(false)
  8. {
  9. m_State = S_CALL_UNAVAILABLE;
  10. m_IPOLineID = CConfig::getAssoIpoLineIdOfRecordLineIpr(LineId);
  11. ILogger::getInstance().log(LOG_CLASS_BUSI, LOG_LEVEL_NORMAL, _T("{Line}: 初始化IP录音线路, LineId = %d, IPOLineId = %d"), m_LineID, m_IPOLineID);
  12. }
  13. CLineRecordIprr::~CLineRecordIprr(void)
  14. {
  15. }
  16. /*****************************************************************
  17. **【函数名称】 getState
  18. **【函数功能】 获取状态字符串
  19. **【参数】
  20. **【返回值】
  21. ****************************************************************/
  22. LPCTSTR CLineRecordIprr::getState( void ) const
  23. {
  24. switch(m_State)
  25. {
  26. case S_CALL_STANDBY: return _T("空闲");
  27. case S_CALL_UNAVAILABLE: return _T("不可用");
  28. case S_IPR_COMMUNICATING: return _T("协商中");
  29. case S_IPR_USING: return _T("录音中");
  30. default: return _T("未知状态");
  31. }
  32. }
  33. /*****************************************************************
  34. **【函数名称】 procDevMsg
  35. **【函数功能】 底层事件响应处理
  36. **【参数】 pEvent 事件信息结构体
  37. **【返回值】
  38. ****************************************************************/
  39. void CLineRecordIprr::procDevMsg( PSSM_EVENT pEvent )
  40. {
  41. switch(pEvent->wEventCode)
  42. {
  43. case E_CHG_ChState: // 模拟录音线路状态事件
  44. CIprControl::GetInstance().onEventIprState(this, SsmGetChState(pEvent->nReference));
  45. break;
  46. case E_IPR_START_REC_CB:
  47. CIprControl::GetInstance().onEventStartRecCb(this, pEvent);
  48. break;
  49. case E_IPR_STOP_REC_CB:
  50. CIprControl::GetInstance().onEventStopRecCb(this, pEvent);
  51. break;
  52. case E_IPR_PAUSE_REC_CB:
  53. CIprControl::GetInstance().onEventPauseRecCb(this, pEvent);
  54. break;
  55. case E_IPR_RESTART_REC_CB:
  56. CIprControl::GetInstance().onEventRestartRecCb(this, pEvent);
  57. break;
  58. case E_IPR_ACTIVE_SESSION_CB:
  59. CIprControl::GetInstance().onEventActiveSessionCb(this, pEvent);
  60. break;
  61. case E_IPR_DEACTIVE_SESSION_CB:
  62. CIprControl::GetInstance().onEventDeactiveSessionCb(this, pEvent);
  63. break;
  64. case E_IPR_ACTIVE_AND_REC_CB:
  65. CIprControl::GetInstance().onEventActiveAndRecCb(this, pEvent);
  66. break;
  67. case E_IPR_DEACTIVE_AND_STOPREC_CB:
  68. CIprControl::GetInstance().onEventDeactiveAndStopRecCb(this, pEvent);
  69. break;
  70. }
  71. }
  72. /*****************************************************************
  73. **【函数名称】 procCmd
  74. **【函数功能】 线路命令处理
  75. **【参数】 pPduEntity 线路命令指针
  76. **【返回值】
  77. ****************************************************************/
  78. void CLineRecordIprr::procCmd( CPduEntity * pPduEntity )
  79. {
  80. switch(pPduEntity->GetCmdType())
  81. {
  82. case PDU_CMD_CTI_VS_RECORD: // 处理录音命令
  83. CIprControl::GetInstance().onCmdLineRecord(this, pPduEntity);
  84. break;
  85. case PDU_CMD_CTI_VS_LINECONTROL: // 处理线路控制命令
  86. CIprControl::GetInstance().onCmdLineControl(this, pPduEntity);
  87. break;
  88. }
  89. }
  90. /*****************************************************************
  91. **【函数名称】 isReady4Rec
  92. **【函数功能】 是否可以录音
  93. **【参数】
  94. **【返回值】
  95. ****************************************************************/
  96. bool CLineRecordIprr::isReady4Rec( CString& RecFileName )
  97. {
  98. if(m_pCmdEntity == NULL || m_pCmdEntity->GetCmdType() != PDU_CMD_CTI_VS_RECORD)
  99. return false;
  100. RecFileName = m_pCmdEntity->GetDataString(3); //录音文件名
  101. return true;
  102. }
  103. /*****************************************************************
  104. **【函数名称】 resetRecContext
  105. **【函数功能】 重置录音环境
  106. **【参数】
  107. **【返回值】
  108. ****************************************************************/
  109. void CLineRecordIprr::resetRecContext( void )
  110. {
  111. m_RecState = REC_STATE_IDLE;
  112. m_SessionId = CONST_IPR_SESSION_INVALID;
  113. m_SessionCodec = CONST_IPR_CODEC_INVALID;
  114. m_FowardingPPort = 0;
  115. m_FowardingSPort = 0;
  116. m_IsSessionActived = false;
  117. }