|
|
@@ -21,10 +21,10 @@ CTaskMgr::~CTaskMgr(void)
|
|
21
|
21
|
/*****************************************************************
|
|
22
|
22
|
**【函数名称】 __addTask
|
|
23
|
23
|
**【函数功能】 添加Task
|
|
24
|
|
-**【参数】
|
|
|
24
|
+**【参数】
|
|
25
|
25
|
**【返回值】
|
|
26
|
26
|
****************************************************************/
|
|
27
|
|
-void CTaskMgr::__addTask( CTask* pTask )
|
|
|
27
|
+void CTaskMgr::__addTask(CTask* pTask)
|
|
28
|
28
|
{
|
|
29
|
29
|
m_TaskLock.Lock();
|
|
30
|
30
|
m_TaskTable.SetAt(reinterpret_cast<LONG>(pTask), pTask);
|
|
|
@@ -35,21 +35,21 @@ void CTaskMgr::__addTask( CTask* pTask )
|
|
35
|
35
|
**【函数名称】 __onAgentLogin
|
|
36
|
36
|
**【函数功能】 坐席签入处理
|
|
37
|
37
|
**【参数】 消息实体
|
|
38
|
|
-**【返回值】
|
|
|
38
|
+**【返回值】
|
|
39
|
39
|
****************************************************************/
|
|
40
|
|
-void CTaskMgr::__onAgentLogin( CPduEntity &PduEntity )
|
|
|
40
|
+void CTaskMgr::__onAgentLogin(CPduEntity &PduEntity)
|
|
41
|
41
|
{
|
|
42
|
42
|
// 显示日志
|
|
43
|
43
|
ILogger::getInstance().log(LOG_CLASS_SOCKET, LOG_LEVEL_NORMAL, _T("Agent->CTI, CMD = [坐席签入], \
|
|
44
|
44
|
Exten = %d, Agent = %d"),
|
|
45
|
|
- PduEntity.GetDataUInt(1),
|
|
46
|
|
- PduEntity.GetDataUInt(2));
|
|
|
45
|
+ PduEntity.GetDataUInt(1),
|
|
|
46
|
+ PduEntity.GetDataUInt(2));
|
|
47
|
47
|
|
|
48
|
48
|
// 设置内线分机的当前坐席工号
|
|
49
|
49
|
CLogicLine* pLine = CLineHolder::GetInstance().getLogicLine(PduEntity.GetDataUInt(1));
|
|
50
|
|
- if(pLine == NULL)
|
|
|
50
|
+ if (pLine == NULL)
|
|
51
|
51
|
ILogger::getInstance().log(LOG_CLASS_SOCKET, LOG_LEVEL_WARNING, _T("{TaskMgr}: 坐席[%d]签入绑定分机失败: 无法获取目标分机[%d]"), PduEntity.GetDataUInt(2),
|
|
52
|
|
- PduEntity.GetDataUInt(1));
|
|
|
52
|
+ PduEntity.GetDataUInt(1));
|
|
53
|
53
|
else
|
|
54
|
54
|
pLine->setAgentNum(PduEntity.GetDataUInt(2), PduEntity.GetDataString(3));
|
|
55
|
55
|
}
|
|
|
@@ -58,35 +58,35 @@ void CTaskMgr::__onAgentLogin( CPduEntity &PduEntity )
|
|
58
|
58
|
**【函数名称】 __onAgentLogout
|
|
59
|
59
|
**【函数功能】 坐席签出处理
|
|
60
|
60
|
**【参数】 消息实体
|
|
61
|
|
-**【返回值】
|
|
|
61
|
+**【返回值】
|
|
62
|
62
|
****************************************************************/
|
|
63
|
|
-void CTaskMgr::__onAgentLogout( CPduEntity &PduEntity )
|
|
|
63
|
+void CTaskMgr::__onAgentLogout(CPduEntity &PduEntity)
|
|
64
|
64
|
{
|
|
65
|
65
|
// 显示日志
|
|
66
|
|
- ILogger::getInstance().log(LOG_CLASS_SOCKET, LOG_LEVEL_NORMAL, _T("Agent->CTI, CMD = [坐席签出], Exten = %d, Agent = %d"),
|
|
67
|
|
- PduEntity.GetDataUInt(1),
|
|
68
|
|
- PduEntity.GetDataUInt(2));
|
|
|
66
|
+ ILogger::getInstance().log(LOG_CLASS_SOCKET, LOG_LEVEL_NORMAL, _T("Agent->CTI, CMD = [坐席签出], Exten = %d, Agent = %d"),
|
|
|
67
|
+ PduEntity.GetDataUInt(1),
|
|
|
68
|
+ PduEntity.GetDataUInt(2));
|
|
69
|
69
|
|
|
70
|
70
|
// 设置内线分机的当前坐席工号
|
|
71
|
71
|
CLogicLine* pLine = CLineHolder::GetInstance().getLogicLine(PduEntity.GetDataUInt(1));
|
|
72
|
|
- if(pLine != NULL)
|
|
73
|
|
- pLine->setAgentNum(0,"");
|
|
|
72
|
+ if (pLine != NULL)
|
|
|
73
|
+ pLine->setAgentNum(0, "");
|
|
74
|
74
|
}
|
|
75
|
75
|
|
|
76
|
76
|
/*****************************************************************
|
|
77
|
77
|
**【函数名称】 __onAgentReset
|
|
78
|
78
|
**【函数功能】 重置处理
|
|
79
|
79
|
**【参数】 消息实体
|
|
80
|
|
-**【返回值】
|
|
|
80
|
+**【返回值】
|
|
81
|
81
|
****************************************************************/
|
|
82
|
|
-void CTaskMgr::__onAgentReset( CPduEntity &PduEntity )
|
|
|
82
|
+void CTaskMgr::__onAgentReset(CPduEntity &PduEntity)
|
|
83
|
83
|
{
|
|
84
|
84
|
// 显示日志
|
|
85
|
85
|
ILogger::getInstance().log(LOG_CLASS_SOCKET, LOG_LEVEL_NORMAL, _T("Agent->CTI, CMD = [坐席重置], Exten = %d"), PduEntity.GetDataUInt(1));
|
|
86
|
86
|
|
|
87
|
87
|
// 获取线路类指针
|
|
88
|
88
|
CLogicLine* pLine = CLineHolder::GetInstance().getLogicLine(PduEntity.GetDataUInt(1));
|
|
89
|
|
- if(pLine == NULL)
|
|
|
89
|
+ if (pLine == NULL)
|
|
90
|
90
|
return;
|
|
91
|
91
|
|
|
92
|
92
|
// 删除关联任务
|
|
|
@@ -100,14 +100,14 @@ void CTaskMgr::__onAgentReset( CPduEntity &PduEntity )
|
|
100
|
100
|
**【函数名称】 __onTaskFailed
|
|
101
|
101
|
**【函数功能】 处理Task执行失败
|
|
102
|
102
|
**【参数】 消息实体
|
|
103
|
|
-**【返回值】
|
|
|
103
|
+**【返回值】
|
|
104
|
104
|
****************************************************************/
|
|
105
|
|
-void CTaskMgr::__onTaskFailed( CTask* pTask, CPduEntity &PduEntity )
|
|
|
105
|
+void CTaskMgr::__onTaskFailed(CTask* pTask, CPduEntity &PduEntity)
|
|
106
|
106
|
{
|
|
107
|
107
|
// 显示日志
|
|
108
|
108
|
CString DevType;
|
|
109
|
109
|
UINT HostLine;
|
|
110
|
|
- if(PduEntity.GetLocalDevType() == PDU_DEV_TYPE_ACD)
|
|
|
110
|
+ if (PduEntity.GetLocalDevType() == PDU_DEV_TYPE_ACD)
|
|
111
|
111
|
{
|
|
112
|
112
|
DevType = _T("ACD");
|
|
113
|
113
|
HostLine = PduEntity.GetDataUInt(1);
|
|
|
@@ -133,14 +133,14 @@ void CTaskMgr::__onTaskFailed( CTask* pTask, CPduEntity &PduEntity )
|
|
133
|
133
|
**【函数功能】 处理设备操作进展
|
|
134
|
134
|
**【参数】 EvtType 消息事件类型
|
|
135
|
135
|
lpContent 消息内容
|
|
136
|
|
-**【返回值】
|
|
|
136
|
+**【返回值】
|
|
137
|
137
|
****************************************************************/
|
|
138
|
|
-void CTaskMgr::__procDevOpProcess( UINT EvtType, const PARAM lpContent )
|
|
|
138
|
+void CTaskMgr::__procDevOpProcess(UINT EvtType, const PARAM lpContent)
|
|
139
|
139
|
{
|
|
140
|
140
|
EventOpProcess &EvtInfo = *(EventOpProcess*)lpContent;
|
|
141
|
141
|
// 查找到Task并处理
|
|
142
|
142
|
CTask* pTask = findTask(EvtInfo.nInstance);
|
|
143
|
|
- if(pTask != NULL)
|
|
|
143
|
+ if (pTask != NULL)
|
|
144
|
144
|
pTask->OnDevOpProcess(EvtInfo);
|
|
145
|
145
|
}
|
|
146
|
146
|
|
|
|
@@ -149,9 +149,9 @@ void CTaskMgr::__procDevOpProcess( UINT EvtType, const PARAM lpContent )
|
|
149
|
149
|
**【函数功能】 设备操作结果返回
|
|
150
|
150
|
**【参数】 EvtType 消息事件类型
|
|
151
|
151
|
lpContent 消息内容
|
|
152
|
|
-**【返回值】
|
|
|
152
|
+**【返回值】
|
|
153
|
153
|
****************************************************************/
|
|
154
|
|
-void CTaskMgr::__procDevOpResult( UINT EvtType, const PARAM lpContent )
|
|
|
154
|
+void CTaskMgr::__procDevOpResult(UINT EvtType, const PARAM lpContent)
|
|
155
|
155
|
{
|
|
156
|
156
|
__try
|
|
157
|
157
|
{
|
|
|
@@ -177,15 +177,15 @@ void CTaskMgr::__procDevOpResult( UINT EvtType, const PARAM lpContent )
|
|
177
|
177
|
**【函数功能】 设备主动操作
|
|
178
|
178
|
**【参数】 EvtType 消息事件类型
|
|
179
|
179
|
lpContent 消息内容
|
|
180
|
|
-**【返回值】
|
|
|
180
|
+**【返回值】
|
|
181
|
181
|
****************************************************************/
|
|
182
|
|
-void CTaskMgr::__procDevOperator( UINT EvtType, const PARAM lpContent )
|
|
|
182
|
+void CTaskMgr::__procDevOperator(UINT EvtType, const PARAM lpContent)
|
|
183
|
183
|
{
|
|
184
|
184
|
CTask *pTask = NULL;
|
|
185
|
185
|
// 事件内容解析
|
|
186
|
186
|
EventDevOperation &EvtInfo = *(EventDevOperation*)lpContent;
|
|
187
|
|
-
|
|
188
|
|
- switch(EvtInfo.nOpType)
|
|
|
187
|
+
|
|
|
188
|
+ switch (EvtInfo.nOpType)
|
|
189
|
189
|
{
|
|
190
|
190
|
case DEV_OP_CALL_IN: // 外线来电
|
|
191
|
191
|
pTask = new(std::nothrow) CTaskDevCallIn(EvtInfo);
|
|
|
@@ -199,24 +199,24 @@ void CTaskMgr::__procDevOperator( UINT EvtType, const PARAM lpContent )
|
|
199
|
199
|
break;
|
|
200
|
200
|
}
|
|
201
|
201
|
|
|
202
|
|
- if(pTask == NULL)
|
|
|
202
|
+ if (pTask == NULL)
|
|
203
|
203
|
return;
|
|
204
|
204
|
|
|
205
|
205
|
// 保存Task
|
|
206
|
206
|
__addTask(pTask);
|
|
207
|
207
|
|
|
208
|
208
|
// 返回Fals代表执行失败,移除Task
|
|
209
|
|
- if(!pTask->DoTask())
|
|
210
|
|
- removeTask((long)pTask);
|
|
|
209
|
+ if (!pTask->DoTask())
|
|
|
210
|
+ removeTask((long)pTask);
|
|
211
|
211
|
}
|
|
212
|
212
|
|
|
213
|
213
|
/*****************************************************************
|
|
214
|
214
|
**【函数名称】 init
|
|
215
|
215
|
**【函数功能】 模块初始化
|
|
216
|
|
-**【参数】
|
|
217
|
|
-**【返回值】
|
|
|
216
|
+**【参数】
|
|
|
217
|
+**【返回值】
|
|
218
|
218
|
****************************************************************/
|
|
219
|
|
-void CTaskMgr::init( void )
|
|
|
219
|
+void CTaskMgr::init(void)
|
|
220
|
220
|
{
|
|
221
|
221
|
// 注册底层设备消息和设备操作结果
|
|
222
|
222
|
CMsgCenter& MC = CMsgCenter::GetInstance();
|
|
|
@@ -237,24 +237,24 @@ void CTaskMgr::uninit(void)
|
|
237
|
237
|
/*****************************************************************
|
|
238
|
238
|
**【函数名称】 removeTask
|
|
239
|
239
|
**【函数功能】 删除Task
|
|
240
|
|
-**【参数】
|
|
241
|
|
-**【返回值】
|
|
|
240
|
+**【参数】
|
|
|
241
|
+**【返回值】
|
|
242
|
242
|
****************************************************************/
|
|
243
|
|
-void CTaskMgr::removeTask( long TaskId )
|
|
|
243
|
+void CTaskMgr::removeTask(long TaskId)
|
|
244
|
244
|
{
|
|
245
|
|
- if(TaskId == TASK_ID_INVALID)
|
|
|
245
|
+ if (TaskId == TASK_ID_INVALID)
|
|
246
|
246
|
return;
|
|
247
|
247
|
|
|
248
|
248
|
m_TaskLock.Lock();
|
|
249
|
249
|
|
|
250
|
250
|
CTask* pTask = NULL;
|
|
251
|
|
- if(m_TaskTable.Lookup(TaskId, pTask))
|
|
|
251
|
+ if (m_TaskTable.Lookup(TaskId, pTask))
|
|
252
|
252
|
{
|
|
253
|
253
|
m_TaskTable.RemoveKey(TaskId);
|
|
254
|
254
|
// 删除Task
|
|
255
|
255
|
ASSERT(pTask != NULL);
|
|
256
|
256
|
delete pTask;
|
|
257
|
|
- pTask=NULL;
|
|
|
257
|
+ pTask = NULL;
|
|
258
|
258
|
}
|
|
259
|
259
|
|
|
260
|
260
|
POSITION pos = m_TaskTable.GetStartPosition();
|
|
|
@@ -264,7 +264,7 @@ void CTaskMgr::removeTask( long TaskId )
|
|
264
|
264
|
if (pTask == NULL || pTask->IsExpire()) {
|
|
265
|
265
|
m_TaskTable.RemoveKey(strKey);
|
|
266
|
266
|
if (pTask != NULL) {
|
|
267
|
|
- ILogger::getInstance().log(LOG_CLASS_BUSI, LOG_LEVEL_ERROR, _T("{TaskMgr}: 失效Task[%s]TaskId[%ld]LineId[%d]时间[%ld]删除"),pTask->Name(), reinterpret_cast<LONG>(pTask),pTask->GetAssoLineId(),pTask->TaskTime());
|
|
|
267
|
+ ILogger::getInstance().log(LOG_CLASS_BUSI, LOG_LEVEL_ERROR, _T("{TaskMgr}: 失效Task[%s]TaskId[%ld]LineId[%d]时间[%ld]删除"), pTask->Name(), reinterpret_cast<LONG>(pTask), pTask->GetAssoLineId(), pTask->TaskTime());
|
|
268
|
268
|
delete pTask;
|
|
269
|
269
|
pTask = NULL;
|
|
270
|
270
|
}
|
|
|
@@ -281,12 +281,12 @@ void CTaskMgr::removeTask( long TaskId )
|
|
281
|
281
|
/*****************************************************************
|
|
282
|
282
|
**【函数名称】 findTask
|
|
283
|
283
|
**【函数功能】 查找Task
|
|
284
|
|
-**【参数】
|
|
|
284
|
+**【参数】
|
|
285
|
285
|
**【返回值】
|
|
286
|
286
|
****************************************************************/
|
|
287
|
|
-CTask* CTaskMgr::findTask( long TaskId )
|
|
|
287
|
+CTask* CTaskMgr::findTask(long TaskId)
|
|
288
|
288
|
{
|
|
289
|
|
- if(TaskId == TASK_ID_INVALID)
|
|
|
289
|
+ if (TaskId == TASK_ID_INVALID)
|
|
290
|
290
|
return NULL;
|
|
291
|
291
|
|
|
292
|
292
|
CTask* pTask = NULL;
|
|
|
@@ -302,14 +302,14 @@ CTask* CTaskMgr::findTask( long TaskId )
|
|
302
|
302
|
**【函数名称】 onPduMessage
|
|
303
|
303
|
**【函数功能】 Pdu命令处理接口
|
|
304
|
304
|
**【参数】 PduEntity: 消息实体
|
|
305
|
|
-**【返回值】
|
|
|
305
|
+**【返回值】
|
|
306
|
306
|
***************************************************************/
|
|
307
|
|
-void CTaskMgr::onPduMessage( CPduEntity &PduEntity )
|
|
|
307
|
+void CTaskMgr::onPduMessage(CPduEntity &PduEntity)
|
|
308
|
308
|
{
|
|
309
|
309
|
// 根据命令类型创建Task
|
|
310
|
310
|
CTask *pTask = NULL;
|
|
311
|
311
|
PDU_CMD_TYPE nCmdType = PduEntity.GetCmdType();
|
|
312
|
|
- switch(nCmdType)
|
|
|
312
|
+ switch (nCmdType)
|
|
313
|
313
|
{
|
|
314
|
314
|
case PDU_CMD_AGENT_LOGIN: // 坐席签入
|
|
315
|
315
|
__onAgentLogin(PduEntity);
|
|
|
@@ -344,7 +344,7 @@ void CTaskMgr::onPduMessage( CPduEntity &PduEntity )
|
|
344
|
344
|
break;
|
|
345
|
345
|
|
|
346
|
346
|
case PDU_CMD_AGENT_TAKEBACK: // 坐席接回
|
|
347
|
|
- pTask = new(std::nothrow) CTaskAgentTakeBack(PduEntity);
|
|
|
347
|
+ pTask = new(std::nothrow) CTaskAgentTakeBack(PduEntity);
|
|
348
|
348
|
break;
|
|
349
|
349
|
|
|
350
|
350
|
case PDU_CMD_AGENT_TRANSTALK: // 坐席转移
|
|
|
@@ -435,17 +435,14 @@ void CTaskMgr::onPduMessage( CPduEntity &PduEntity )
|
|
435
|
435
|
break;
|
|
436
|
436
|
}
|
|
437
|
437
|
|
|
438
|
|
- if(pTask == NULL) return;
|
|
|
438
|
+ if (pTask == NULL) return;
|
|
439
|
439
|
|
|
440
|
440
|
// 保存Task
|
|
441
|
441
|
__addTask(pTask);
|
|
442
|
442
|
|
|
443
|
443
|
// 返回Fase代表操作失败,移除该Task
|
|
444
|
|
- if(!pTask->DoTask())
|
|
|
444
|
+ if (!pTask->DoTask())
|
|
445
|
445
|
__onTaskFailed(pTask, PduEntity);
|
|
446
|
|
- else
|
|
447
|
|
- ILogger::getInstance().log(LOG_CLASS_BUSI, LOG_LEVEL_NORMAL, _T("{CTaskMgr}:DoTask[%s]TaskId[%ld]LineId[%d]时间[%ld]"), pTask->Name(), reinterpret_cast<LONG>(pTask), pTask->GetAssoLineId(), pTask->TaskTime());
|
|
448
|
|
-
|
|
449
|
446
|
}
|
|
450
|
447
|
|
|
451
|
448
|
/*****************************************************************
|
|
|
@@ -455,21 +452,21 @@ void CTaskMgr::onPduMessage( CPduEntity &PduEntity )
|
|
455
|
452
|
PduEntity:消息实体
|
|
456
|
453
|
**【返回值】
|
|
457
|
454
|
***************************************************************/
|
|
458
|
|
-void CTaskMgr::onTaskPduMsg( UINT LineId, CPduEntity &PduEntity )
|
|
|
455
|
+void CTaskMgr::onTaskPduMsg(UINT LineId, CPduEntity &PduEntity)
|
|
459
|
456
|
{
|
|
460
|
457
|
CLogicLine* pLine = CLineHolder::GetInstance().getLogicLine(LineId);
|
|
461
|
458
|
ASSERT(pLine != NULL);
|
|
462
|
|
- if(pLine == NULL)
|
|
|
459
|
+ if (pLine == NULL)
|
|
463
|
460
|
{
|
|
464
|
461
|
ILogger::getInstance().log(LOG_CLASS_BUSI, LOG_LEVEL_WARNING, _T("{TaskMgr}: Task处理PDU命令失败, 无法定位关联线路[%d]"), LineId);
|
|
465
|
462
|
return;
|
|
466
|
463
|
}
|
|
467
|
464
|
|
|
468
|
465
|
CTask* pTask = findTask(pLine->taskIdBinded());
|
|
469
|
|
- if(pTask == NULL)
|
|
|
466
|
+ if (pTask == NULL)
|
|
470
|
467
|
{
|
|
471
|
468
|
pLine->taskIdBinded() = TASK_ID_INVALID;
|
|
472
|
|
- if(PduEntity.GetCmdType() == PDU_CMD_AGENT_CONFIRM_TRANSFER)
|
|
|
469
|
+ if (PduEntity.GetCmdType() == PDU_CMD_AGENT_CONFIRM_TRANSFER)
|
|
473
|
470
|
{
|
|
474
|
471
|
// 返回命令
|
|
475
|
472
|
PduEntity.SetToExecReturn();
|
|
|
@@ -480,8 +477,8 @@ void CTaskMgr::onTaskPduMsg( UINT LineId, CPduEntity &PduEntity )
|
|
480
|
477
|
else
|
|
481
|
478
|
{
|
|
482
|
479
|
// task处理Pdu命令返回成功,删除task
|
|
483
|
|
- if(pTask->OnCmdOperation(PduEntity))
|
|
484
|
|
- removeTask((long)pTask);
|
|
|
480
|
+ if (pTask->OnCmdOperation(PduEntity))
|
|
|
481
|
+ removeTask((long)pTask);
|
|
485
|
482
|
}
|
|
486
|
483
|
}
|
|
487
|
484
|
|
|
|
@@ -490,13 +487,13 @@ void CTaskMgr::onTaskPduMsg( UINT LineId, CPduEntity &PduEntity )
|
|
490
|
487
|
**【函数功能】 消息事件处理函数
|
|
491
|
488
|
**【参数】 EvtType 消息事件类型
|
|
492
|
489
|
lpContent 消息内容
|
|
493
|
|
-**【返回值】
|
|
|
490
|
+**【返回值】
|
|
494
|
491
|
****************************************************************/
|
|
495
|
|
-void CTaskMgr::onMessage( UINT MsgType, const PARAM lpContent )
|
|
|
492
|
+void CTaskMgr::onMessage(UINT MsgType, const PARAM lpContent)
|
|
496
|
493
|
{
|
|
497
|
|
- if(lpContent == NULL) return;
|
|
|
494
|
+ if (lpContent == NULL) return;
|
|
498
|
495
|
|
|
499
|
|
- switch(MsgType)
|
|
|
496
|
+ switch (MsgType)
|
|
500
|
497
|
{
|
|
501
|
498
|
case DEV_EVENT_LINE_OP_PROCESS: // 设备操作进展
|
|
502
|
499
|
__procDevOpProcess(MsgType, lpContent);
|
|
|
@@ -513,10 +510,3 @@ void CTaskMgr::onMessage( UINT MsgType, const PARAM lpContent )
|
|
513
|
510
|
}
|
|
514
|
511
|
|
|
515
|
512
|
|
|
516
|
|
-
|
|
517
|
|
-
|
|
518
|
|
-
|
|
519
|
|
-
|
|
520
|
|
-
|
|
521
|
|
-
|
|
522
|
|
-
|