| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- /*************************************************************************
- 【文件名】 CallSession.h
- 【功能模块和目的】 呼叫会话类头文件
- 【开发者及日期】 郑石诺 2015/03/31
- 【版本】 V1.0.0
- 【版权信息】 Copyright (C)2015 河南华谊网络科技有限公司
- 【更改记录】
- *************************************************************************/
- #pragma once
- #include"../Public/GlobalDef/TemplateTimer.h"
- class CSubSession;
- class CMC;
- class CProxyShell;
- /*************************************************************************
- 【类名】 CCallSession
- 【功能】
- 【接口说明】 呼叫会话类
- 【开发者及日期】 郑石诺 2015/03/31
- 【版本】 V1.0.0
- 【版权信息】 Copyright (C)2015 河南华谊网络科技有限公司
- 【更改记录】
- *************************************************************************/
- class CCallSession
- {
- public:
- CCallSession(long SessionId);
- ~CCallSession(void);
- // 属性相关
- long id(void) const { return m_Id; } // 会话ID
- UINT lineCount(void) const { return m_LineMap.GetCount(); } // 当前会话中活动线路的个数
-
- DEV_RES_ID getPeerLine(CRDRID LineId); // 获取当前线路关联的对端线路
- bool isExist(CRDRID LineId, CALL_PARTY_TYPE PartyType); // 指定职责的线路是否在会话中
- // 线路操作相关
- bool insertLine(CRDRID LineId, CALL_PARTY_TYPE PartyType, bool IsLink); // 添加线路到会话
- bool insertLine(CRDRID LineId, UINT SessionId, bool IsLink); // 添加待定线路到会话
- bool insertLine(CRDRID HostLineId, CRDRID SrcLineId, bool IsLink); // 添加监听线路到会话
- void removeLine(CRDRID LineId, CALL_PARTY_TYPE PartyType, PENDING_CALL_TYPE CallType = PENDING_CALL_DIRECT); // 从会话中删除指定线路
- // 逻辑处理
- bool trans2Meeting(CRDRID HostLineId); // 将当前会话转换为会议
- // 事件响应
- void onLineStateChanged(CRDRID LineId, VIRTUAL_LINE_STATE LineState, LPCTSTR lpCallerNum, LPCTSTR lpCalleeNum); // 线路状态事件
- void onRecordStop(CRDRID LineId, UINT TaskId); // 录音停止事件
- // 业务逻辑操作调用
- bool setupPendingCall(long& SubCall, PendingCallInfo* pInfo); // 启动待处理呼叫
- bool lineLeave(CRDRID LineId); // 指定线路退出会话且挂机
- bool lineInstead(CRDRID HostLine, CRDRID PeerLine, UINT ExtNum); // 代接指定线路
- bool lineIntercept(CRDRID HostLine, CRDRID PeerLine); // 替换通话中的线路
- bool lineInsert(CRDRID HostLine, CRDRID PeerLine); // 插入线路到会话
- bool lineListen(CRDRID HostLine, CRDRID PeerLine); // 监听线路
- bool lineRecord(CRDRID HostLine, LPCTSTR lpFileName); // 线路录音启动
- bool lineLeaveWord(CRDRID HostLine, RecordContent* pContent); // 留言启动
- bool lineMute(CRDRID HostLine, bool IsOn); // 静音控制
- bool lineConsultConfirm(CRDRID PeerLine, UINT Type); // 协商呼叫确认
- bool line2Meeting(DEV_RES_ID LineId, CALL_PARTY_TYPE Party); // 通话线路转入会议
- private:
- // 呼叫相关
- CALL_PARTY_TYPE __isLineMine(CRDRID LineId); // 指定线路是否属于当前会话
- void __detachListen(CRDRID HostLine); // 解除指定线路的监听
- CSubSession* __getSubSession(CRDRID PendingLine); // 通过待处理线路ID查找子呼叫
- void __clearSubSession(void); // 释放所有子会话
- void __notifySubSessionLineFree(CRDRID LineId); // 通知子会话相关线路空闲
- // 通话相关
- bool __line2Link(CRDRID LineId, CRDRID LinePeer); // 线路进入双向通话
- bool __lineRecord(CRDRID HostLine, LPCTSTR lpFileName); // 执行录音操作
- bool __lineMute(CRDRID HostLine, bool IsOn); // 线路静音操作
- bool __meetingMute(CRDRID HostLine, bool IsOn); // 会议静音操作
- // 对线路状态进行分类处理
- void __onLineStateFree(CRDRID LineId, LPCTSTR lpCallerNum, LPCTSTR lpCalleeNum);
- void __onLineStateRingBack(CRDRID LineId, LPCTSTR lpCallerNum, LPCTSTR lpCalleeNum);
- void __onLineStateAlerting(CRDRID LineId, LPCTSTR lpCallerNum, LPCTSTR lpCalleeNum);
- void __onLineStateProgressing(CRDRID LineId, LPCTSTR lpCallerNum, LPCTSTR lpCalleeNum);
- void __onLineStateTalking(CRDRID LineId, LPCTSTR lpCallerNum, LPCTSTR lpCalleeNum);
- private:
- // 业务属性
- long m_Id; // 会话ID
- UINT m_SubCallIndex; // 要生成的子呼叫的基础索引值
- MeetingInfo m_MeetingId; // 会话关联的会议ID(0 -> 未关联会议)
- // 线路属性
- DEV_RES_ID m_LineHost; // 会话的主控线路
- DEV_RES_ID m_LinePeer; // 通话的对端线路
- CMap<DEV_RES_ID, CRDRID, UINT, UINT> m_PendingLineMap; // 正在进行操作处理的线路(Key = 被操作线路, Value = 子会话ID)
- CMap<DEV_RES_ID, CRDRID, DEV_RES_ID, CRDRID> m_ListenLineMap; // 正在监听通话的线路(Key = 监听线路, Value = 被监听线路)
- CMap<DEV_RES_ID, CRDRID, CString, LPCTSTR> m_RecordMap; // 当前会话中的录音索引表
- CMap<DEV_RES_ID, CRDRID, int, int> m_LineMap; // 保存所有在会话中的线路
- // 当前呼叫中子会话索引表
- CMap<UINT, UINT, CSubSession*, CSubSession*> m_SubCallMap; // 保存所有子会话(Key = 子会话ID, Value = 子会话)
- TTimer<CCallSession> m_SessionTimer; // 会话定时器
- void __onTimerPostProcessing(void); // 到时处理
- void __setTimer(UINT TimmerId, UINT Elapse);
- void __killTimer(UINT TimmerId);
- };
|