| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- /*************************************************************************
- 【文件名】 SessionShell.h
- 【功能模块和目的】 会话管理类头文件
- 【开发者及日期】 郑石诺 2015/03/26
- 【版本】 V1.0.0
- 【版权信息】 Copyright (C)2015 河南华谊网络科技有限公司
- 【更改记录】
- *************************************************************************/
- #pragma once
- class CCallSession;
- /*************************************************************************
- 【类名】 CSessionShell
- 【功能】
- 【接口说明】 会话管理类
- 【开发者及日期】 郑石诺 2015/03/26
- 【版本】 V1.0.0
- 【版权信息】 Copyright (C)2015 河南华谊网络科技有限公司
- 【更改记录】
- *************************************************************************/
- class CSessionShell
- {
- SINGLETON_DECLARE(CSessionShell)
- public:
- ~CSessionShell(void);
- void start(void);
- void stop(void);
- // LineReq接口
- bool procReqDialSetup(long &SubCall, PendingCallInfo* pInfo); // 启动临时呼叫
- bool procReqLeave(long Call, CRDRID LineId); // 指定线路退出会话且挂机
- bool procReqInstead(long Call, CRDRID HostLine, CRDRID PeerLine, UINT ExtNum); // 代接指定线路
- bool procReqIntercept(long Call, CRDRID HostLine, CRDRID PeerLine); // 通话线路替换
- bool procReqInsert(long Call, CRDRID HostLine, CRDRID PeerLine); // 插入通话线路
- bool procReqListen(long Call, CRDRID HostLine, CRDRID PeerLine); // 监听通话线路
- bool procReqRecord(long Call, CRDRID HostLine, LPCTSTR lpFileName); // 线路录音启动
- bool procReqLeaveWord(long Call, CRDRID HostLine, RecordContent* pContent); // 留言录音启动
- bool procReqMute(long Call, CRDRID HostLine, bool IsOn); // 静音控制
- bool procReqConsultConfirm(long Call, CRDRID HostLine, CRDRID PeerLine, int Type); // 协商呼叫确认
- // 设备侧接口
- void onDevResourceNew(CRDRID Id); // 线路初始化
- void onDevResourceDel(CRDRID Id); // 线路删除
- void onLineStateChanged(CRDRID Id, long Session, VIRTUAL_LINE_STATE State, LPCTSTR Caller, LPCTSTR Callee); // 线路状态变化事件接口
- bool onLineChannelEvent(CRDRID Id, long Session, DEV_CH_EVT_TYPE EvtType, LPCTSTR lpContent, UINT ExtenId = 0); // 线路向上层发送的设备主动事件 // 检测当前分机号是否存在
- private:
- CSessionShell(void);
- UINT __procLineStatus(void); // 线路状态事件处理接口,供线程函数调用
- void __wait(void); // 待处理内容为空时阻塞等待
- static UINT __dispatchLineState(LPVOID pParam); // 处理线路状态事件队列的线程函数
- // 线路状态相关
- void __pushLineState(LineState* pState);
- LineState* __popLineState(int& LeftCount);
- void __freeAllLineState(void);
- // 会话相关
- CCallSession* __createCall(CRDRID HostLineId); // 生成新会话
- void __delCall(long CallId); // 删除会话
- CCallSession* __getCall(long CallId); // 查找指定的会话
- void __freeAllCall(void);
- private:
- volatile bool m_Stop;
- CWinThread* m_pThreadObj;
- long m_nBaseCallId; // 基础会话ID
- CEvent m_ThreadWaitFlag; // 消息分发线程睡眠的信号事件
- CCriticalSection m_Cs4LineStateEvent; // 线路状态事件的互斥对象
- CCriticalSection m_Cs4Session; // 会话创建的互斥对象
- CMap<long, long, CCallSession*, CCallSession*> m_mapCall; // 活动呼叫列表
- CList<LineState*, LineState*> m_listLineStatus; // 线路状态事件缓冲区队列
- };
|