多数据源中间件标准版1.0

MC.h 4.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. /*************************************************************************
  2. 【文件名】 MC.h
  3. 【功能模块和目的】 毅航MC封装类头文件
  4. 【开发者及日期】 郑石诺 2015/04/07
  5. 【版本】 V1.0.0
  6. 【版权信息】 Copyright (C)2015 河南华谊网络科技有限公司
  7. 【更改记录】
  8. *************************************************************************/
  9. #pragma once
  10. #include "PrdVirtualDevice.h"
  11. #include "FaxVirtualDevice.h"
  12. #include "CConfigLocal.h"
  13. class CPBX;
  14. class CIpmChannel;
  15. class CVoipChannel;
  16. class CDspChannel;
  17. class CSpanChannel;
  18. class COneLeg;
  19. class CChannelResource;
  20. /*************************************************************************
  21. 【类名】 CMC
  22. 【功能】
  23. 【接口说明】 毅航MC封装类
  24. 【开发者及日期】 郑石诺 2015/04/07
  25. 【版本】 V1.0.0
  26. 【版权信息】 Copyright (C)2015 河南华谊网络科技有限公司
  27. 【更改记录】
  28. *************************************************************************/
  29. class CMC
  30. {
  31. SINGLETON_DECLARE(CMC)
  32. public:
  33. ~CMC(void);
  34. bool open(void);
  35. void close(void);
  36. // 业务逻辑接口
  37. LPCTSTR transState(INT Status);
  38. CVoipChannel* allocVoipCh4Exten(int IsxNo);
  39. CIpmChannel* allocIpmCh4SipCh(int IsxNo, int BoardNo);
  40. CDspChannel* allocDspCh(int IsxNo, int BoardNo);
  41. COneLeg* allocFreeTrunk(int IsxNo, int BoardNo, int SpanNo);
  42. COneLeg* getCallLeg(CRDRID ResId);
  43. bool isPbxOK(int IsxNo);
  44. CPrdVirtualDevice& allocPrd(int IsxNo) { return m_PrdDev; }
  45. void onPbxResValid(int IsxNo);
  46. void onPbxResInvalid(int IsxNo, int BoardNo, DEV_RES_TYPE ResType);
  47. CIpmChannel* findIpmCh(CRDRID ResId);
  48. CDspChannel* findDspCh(CRDRID ResId);
  49. CVoipChannel* findVoipCh(CRDRID ResId);
  50. CSpanChannel* findSpanCh(CRDRID ResId);
  51. // 设备资源事件响应函数
  52. void onDevResCreate(CRDRID ResId);
  53. void onDevResDestroy(CRDRID ResId);
  54. void onDevResState(CRDRID ResId);
  55. bool bridgeDevice(CRDRID SrcId, CRDRID DstId, bool IsLink); // 双向连接/断开设备
  56. bool bridgeDevice(CChannelResource* pChanSrc, CChannelResource* pChanDst, bool IsLink, bool IsOneWay);
  57. // 操作
  58. bool channelListen(CRDRID SrcId, CRDRID PeerId, CRDRID DstId, bool IsLink); // 监听指定线路
  59. bool meetingListen(CRDRID DstId, MeetingInfo& MeetingId, bool IsLink); // 监听指定会议
  60. bool meetingMute(CRDRID DstId, MeetingInfo& MeetingId, bool IsOff); // 静音会议中线路
  61. bool meetingRemove(COneLeg* pLeg, MeetingInfo& MeetingId); // 线路离开会议
  62. bool meetingRecord(COneLeg* pLeg, MeetingInfo& MeetingId, RecordContent* pContent, bool IsStop);
  63. // 线路操作接口
  64. void setSessionInfo2Line(CRDRID LineId, long SessionCode); // 设定当前线路关联的会话
  65. bool startRecord(CRDRID LineId, RecordContent* pContent); // 线路录音启动
  66. bool stopRecord(CRDRID LineId); // 线路录音结束
  67. bool move2Meeting(CRDRID LineId, MeetingInfo& MeetId, bool IsOneWay); // 线路加入会议
  68. bool removeFromMeeting(CRDRID LineId, MeetingInfo& MeetId); // 线路离开会议
  69. bool playSound(CRDRID LineId, PlayVoiceContent* pContent); // 线路放音收号
  70. bool playStop(CRDRID LineId); // 线路停止放音
  71. bool dropCall(CRDRID LineId, bool IsPassive); // 线路挂机操作处理
  72. bool dial(CRDRID LineId, LPCTSTR Callee, LPCTSTR Caller, int AccountId); // 线路拨号启动
  73. bool answer(CRDRID LineId); // 应答呼叫
  74. bool offHook(CRDRID LineId, bool IgnoreSession, LPCTSTR CallerNum = NULL); // 通知内线摘机(只对内线有效)
  75. bool fax(CRDRID LineId, LPCTSTR lpFileName, bool IsRecv); // 传真启动(只对外线有效)
  76. bool selfCheck(CRDRID LineId); // 线路自检(只对模拟外线有效)
  77. bool playTone(CRDRID LineId, int Type); // 线路播放信号音
  78. bool createMeeting(CRDRID LineId, MeetingInfo& MeetInfo); // 创建会议
  79. void deleteMeeting(MeetingInfo& MeetInfo); // 删除会议
  80. void freeChanResource(CRDRID LineId); // 释放通道绑定资源
  81. private:
  82. CMC(void);
  83. LPCTSTR __translateResType(DEV_RES_TYPE ResType) const;
  84. CPBX* __getPbx(int IsxNo);
  85. CPBX* __newPbx(int IsxNo);
  86. void __freePbx(void);
  87. void __regExten2Dev(void);
  88. // 系统事件处理函数
  89. void __onSipUserNew(void);
  90. void __onSipUserDel(void);
  91. void __procResourceStateUpdate(INT EvtType, SYS_EVT_DATA* pEvtData);
  92. void __procResourceAlarm(INT EvtType, SYS_EVT_DATA* pEvtData);
  93. void __procResourceCapacity(INT EvtType, SYS_EVT_DATA* pEvtData);
  94. void __procVoiceEvent(METAEVENT* pMetaEvent);
  95. void __procIpmEvent(METAEVENT* pMetaEvent);
  96. void __procFaxEvent(METAEVENT* pMetaEvent);
  97. void __procSipRegSent(void);
  98. void __procSipRegAck(void);
  99. void __procSipTransaction(void);
  100. void __onGcEvent(METAEVENT* pMetaEvent);
  101. void __onSysEvent(METAEVENT* pMetaEvent);
  102. static UINT __pbxEvtThread(LPVOID pParam); // 处理消息事件线程函数
  103. private:
  104. //Dsp节点号
  105. int m_DspIsxNo;
  106. // 类对象实现相关
  107. volatile bool m_Stop;
  108. CWinThread* m_pThreadObj;
  109. // 属性相关
  110. UINT m_state;
  111. // 设备成员
  112. CArray<CPBX*, CPBX*> m_PbxList;
  113. CPrdVirtualDevice m_PrdDev;
  114. CFaxVirtualDevice m_FaxDev;
  115. };