升龙物业 老版本 ocx IPO, 加密狗 转值班电话

SessionShell.h 3.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. /*************************************************************************
  2. 【文件名】 SessionShell.h
  3. 【功能模块和目的】 会话管理类头文件
  4. 【开发者及日期】 郑石诺 2015/03/26
  5. 【版本】 V1.0.0
  6. 【版权信息】 Copyright (C)2015 河南华谊网络科技有限公司
  7. 【更改记录】
  8. *************************************************************************/
  9. #pragma once
  10. class CCallSession;
  11. /*************************************************************************
  12. 【类名】 CSessionShell
  13. 【功能】
  14. 【接口说明】 会话管理类
  15. 【开发者及日期】 郑石诺 2015/03/26
  16. 【版本】 V1.0.0
  17. 【版权信息】 Copyright (C)2015 河南华谊网络科技有限公司
  18. 【更改记录】
  19. *************************************************************************/
  20. class CSessionShell
  21. {
  22. SINGLETON_DECLARE(CSessionShell)
  23. public:
  24. ~CSessionShell(void);
  25. void start(void);
  26. void stop(void);
  27. // LineReq接口
  28. bool procReqDialSetup(long &SubCall, PendingCallInfo* pInfo); // 启动临时呼叫
  29. bool procReqLeave(long Call, CRDRID LineId); // 指定线路退出会话且挂机
  30. bool procReqInstead(long Call, CRDRID HostLine, CRDRID PeerLine, UINT ExtNum); // 代接指定线路
  31. bool procReqIntercept(long Call, CRDRID HostLine, CRDRID PeerLine); // 通话线路替换
  32. bool procReqInsert(long Call, CRDRID HostLine, CRDRID PeerLine); // 插入通话线路
  33. bool procReqListen(long Call, CRDRID HostLine, CRDRID PeerLine); // 监听通话线路
  34. bool procReqRecord(long Call, CRDRID HostLine, LPCTSTR lpFileName); // 线路录音启动
  35. bool procReqLeaveWord(long Call, CRDRID HostLine, RecordContent* pContent); // 留言录音启动
  36. bool procReqMute(long Call, CRDRID HostLine, bool IsOn); // 静音控制
  37. bool procReqConsultConfirm(long Call, CRDRID HostLine, CRDRID PeerLine, int Type); // 协商呼叫确认
  38. // 设备侧接口
  39. void onDevResourceNew(CRDRID Id); // 线路初始化
  40. void onDevResourceDel(CRDRID Id); // 线路删除
  41. void onLineStateChanged(CRDRID Id, long Session, VIRTUAL_LINE_STATE State, LPCTSTR Caller, LPCTSTR Callee); // 线路状态变化事件接口
  42. bool onLineChannelEvent(CRDRID Id, long Session, DEV_CH_EVT_TYPE EvtType, LPCTSTR lpContent, UINT ExtenId = 0); // 线路向上层发送的设备主动事件 // 检测当前分机号是否存在
  43. private:
  44. CSessionShell(void);
  45. UINT __procLineStatus(void); // 线路状态事件处理接口,供线程函数调用
  46. void __wait(void); // 待处理内容为空时阻塞等待
  47. static UINT __dispatchLineState(LPVOID pParam); // 处理线路状态事件队列的线程函数
  48. // 线路状态相关
  49. void __pushLineState(LineState* pState);
  50. LineState* __popLineState(int& LeftCount);
  51. void __freeAllLineState(void);
  52. // 会话相关
  53. CCallSession* __createCall(CRDRID HostLineId); // 生成新会话
  54. void __delCall(long CallId); // 删除会话
  55. CCallSession* __getCall(long CallId); // 查找指定的会话
  56. void __freeAllCall(void);
  57. private:
  58. volatile bool m_Stop;
  59. CWinThread* m_pThreadObj;
  60. long m_nBaseCallId; // 基础会话ID
  61. CEvent m_ThreadWaitFlag; // 消息分发线程睡眠的信号事件
  62. CCriticalSection m_Cs4LineStateEvent; // 线路状态事件的互斥对象
  63. CCriticalSection m_Cs4Session; // 会话创建的互斥对象
  64. CMap<long, long, CCallSession*, CCallSession*> m_mapCall; // 活动呼叫列表
  65. CList<LineState*, LineState*> m_listLineStatus; // 线路状态事件缓冲区队列
  66. };