浏览代码

挂机bug修改,放音收号功能优化。

yangcheng 7 年之前
父节点
当前提交
265b832bd9
共有 4 个文件被更改,包括 40 次插入7 次删除
  1. 5 3
      CTI/TaskAgentHungUp.cpp
  2. 2 2
      FsLink/EslGateway.cpp
  3. 31 2
      FsLink/OpPlayAndDtmf.cpp
  4. 2 0
      FsLink/OpPlayAndDtmf.h

+ 5 - 3
CTI/TaskAgentHungUp.cpp

@@ -33,9 +33,11 @@ BOOL CTaskAgentHungUp::DoTask()
33 33
 	m_pCurrLine->opType() = PDU_CMD_AGENT_HANGUP;
34 34
 
35 35
 	CCallSession* pSession = CSessionHolder::GetInstance().findSession(m_pCurrLine->callId());
36
-	if (pSession->lineCount() == 2) {//2018.5.25.安图要求分机挂时,挂外线。
37
-		CLogicLine* pAssoLine = m_pCurrLine->assoLine(); 
38
-		if (pAssoLine != NULL){
36
+	if (pSession != NULL && pSession->lineCount() == 2)
37
+	{   //2018.5.25.安图要求分机挂时,挂外线。
38
+		CLogicLine* pAssoLine = m_pCurrLine->assoLine();
39
+		if (pAssoLine != NULL)
40
+		{
39 41
 			CCtiCore::GetInstance().getDevLink().exec((long)this, LINE_OP_HANG_UP, pAssoLine->lineId(), NULL);
40 42
 		}
41 43
 	}

+ 2 - 2
FsLink/EslGateway.cpp

@@ -418,13 +418,13 @@ void CEslGateway::__onEslEvtHold( esl_event_t* pEvent, EVENT_HOLD_TYPE EvtType )
418 418
 bool CEslGateway::start( void )
419 419
 {
420 420
 	//m logger
421
-	LOGGER(LOG_LEVEL_WARNING, _T("{EslGateway}: 处理客户端连接, ip = %s,port=%d,pwd=%s"), CConfig::fsAddr(), CConfig::fsPort(), CConfig::fsPwd());
421
+	LOGGER(LOG_LEVEL_NORMAL, _T("{EslGateway}: 处理客户端连接, ip = %s,port=%d,pwd=%s"), CConfig::fsAddr(), CConfig::fsPort(), CConfig::fsPwd());
422 422
 
423 423
 	esl_connect(&m_EslHdl4Listen, CConfig::fsAddr(), CConfig::fsPort(), NULL, CConfig::fsPwd());
424 424
 	if(!m_EslHdl4Listen.connected)
425 425
 		return false;
426 426
 
427
-	LOGGER(LOG_LEVEL_WARNING, _T("{EslGateway}: 处理客户端连接m_EslHdl4Listen OK"));
427
+	LOGGER(LOG_LEVEL_NORMAL, _T("{EslGateway}: 处理客户端连接m_EslHdl4Listen OK"));
428 428
 
429 429
 	esl_events(&m_EslHdl4Listen, ESL_EVENT_TYPE_PLAIN, 
430 430
 		_T("BACKGROUND_JOB CHANNEL_CREATE CHANNEL_PROGRESS CHANNEL_PROGRESS_MEDIA CHANNEL_ANSWER CHANNEL_HANGUP_COMPLETE CHANNEL_HOLD CHANNEL_UNHOLD DTMF CUSTOM sofia::register sofia::unregister"));

+ 31 - 2
FsLink/OpPlayAndDtmf.cpp

@@ -7,6 +7,8 @@
7 7
 
8 8
 COpPlayAndDtmf::COpPlayAndDtmf(COperationReactor* pParent, LONG Instance) : COperation(pParent, Instance),m_Dtmf("")
9 9
 {
10
+	m_bExecuteEnd = FALSE;
11
+	m_bDtmfEnd = FALSE;
10 12
 	ZeroMemory(&m_PlayContent, sizeof(m_PlayContent));
11 13
 }
12 14
 
@@ -51,6 +53,9 @@ bool COpPlayAndDtmf::start( LineOpParam* pParam )
51 53
 	if(m_pHostChan->state() != CHAN_LOGIC_STATE_STANDBY)
52 54
 		return false;
53 55
 
56
+	m_bExecuteEnd = FALSE;
57
+	m_bDtmfEnd = FALSE;
58
+
54 59
 	// 初始化放音内容
55 60
 	ZeroMemory(&m_PlayContent, sizeof(m_PlayContent));
56 61
 	m_PlayContent.nModel = (PlayVoiceMode)pParam->nParam1;
@@ -130,6 +135,16 @@ void COpPlayAndDtmf::onHostChanDtmf( LPCTSTR Dtmf )
130 135
 {
131 136
 	ASSERT(Dtmf != NULL);
132 137
 	m_Dtmf += Dtmf;
138
+
139
+	if (m_PlayContent.nDtmfCount <= m_Dtmf.GetLength())
140
+	{
141
+		m_bDtmfEnd = TRUE; // 收号完成
142
+	}
143
+
144
+	if (m_bExecuteEnd == TRUE && m_bDtmfEnd == TRUE) // 如果 onChanAppExecuted 先执行完成
145
+	{
146
+		_end(true);
147
+	}
133 148
 }
134 149
 
135 150
 /*****************************************************************
@@ -155,6 +170,20 @@ void COpPlayAndDtmf::onChanAppExecuted( CVirtualChan* pHostChan, PAPP_EXEC_NOTIF
155 170
 	ASSERT(pNotify != NULL);
156 171
 	if (pNotify == NULL)
157 172
 		return;
158
-	if(lstrcmp(pNotify->App, ESL_APP_PLAY_DTMF) == 0 || lstrcmp(pNotify->App, ESL_APP_PLAY) == 0)
159
-		_end(true);
173
+	if (lstrcmp(pNotify->App, ESL_APP_PLAY_DTMF) == 0 || lstrcmp(pNotify->App, ESL_APP_PLAY) == 0)
174
+	{
175
+		m_bExecuteEnd = TRUE;
176
+		LOGGER(LOG_LEVEL_NORMAL, _T("{COpPlayAndDtmf}: 通道任务执行结束事件处理 主通道号: %d"), m_pHostChan->no());
177
+		if (m_PlayContent.nModel == PVM_PLAY_WAIT_DIGIT || m_PlayContent.nModel == PVM_WAIT_DIGIT)
178
+		{
179
+			if (m_bDtmfEnd == TRUE)
180
+			{
181
+				_end(true);
182
+			}
183
+		}
184
+		else
185
+		{
186
+			_end(true);
187
+		}
188
+	}
160 189
 }

+ 2 - 0
FsLink/OpPlayAndDtmf.h

@@ -40,6 +40,8 @@ protected:
40 40
 	virtual void _end(bool IsSucceed);			// 操作完成(注:此操作之后只能调用 return 语句)
41 41
 
42 42
 private:
43
+	BOOL m_bExecuteEnd;
44
+	BOOL m_bDtmfEnd;
43 45
 	PlayVoiceContent m_PlayContent;
44 46
 	CString m_Dtmf;
45 47
 };