/************************************************************************* 【文件名】 MC.h 【功能模块和目的】 毅航MC封装类头文件 【开发者及日期】 郑石诺 2015/04/07 【版本】 V1.0.0 【版权信息】 Copyright (C)2015 河南华谊网络科技有限公司 【更改记录】 *************************************************************************/ #pragma once #include "PrdVirtualDevice.h" #include "FaxVirtualDevice.h" #include "CConfigLocal.h" class CPBX; class CIpmChannel; class CVoipChannel; class CDspChannel; class CSpanChannel; class COneLeg; class CChannelResource; /************************************************************************* 【类名】 CMC 【功能】 【接口说明】 毅航MC封装类 【开发者及日期】 郑石诺 2015/04/07 【版本】 V1.0.0 【版权信息】 Copyright (C)2015 河南华谊网络科技有限公司 【更改记录】 *************************************************************************/ class CMC { SINGLETON_DECLARE(CMC) public: ~CMC(void); bool open(void); void close(void); // 业务逻辑接口 LPCTSTR transState(INT Status); CVoipChannel* allocVoipCh4Exten(int IsxNo); CIpmChannel* allocIpmCh4SipCh(int IsxNo, int BoardNo); CDspChannel* allocDspCh(int IsxNo, int BoardNo); COneLeg* allocFreeTrunk(int IsxNo, int BoardNo, int SpanNo); COneLeg* getCallLeg(CRDRID ResId); bool isPbxOK(int IsxNo); CPrdVirtualDevice& allocPrd(int IsxNo) { return m_PrdDev; } void onPbxResValid(int IsxNo); void onPbxResInvalid(int IsxNo, int BoardNo, DEV_RES_TYPE ResType); CIpmChannel* findIpmCh(CRDRID ResId); CDspChannel* findDspCh(CRDRID ResId); CVoipChannel* findVoipCh(CRDRID ResId); CSpanChannel* findSpanCh(CRDRID ResId); // 设备资源事件响应函数 void onDevResCreate(CRDRID ResId); void onDevResDestroy(CRDRID ResId); void onDevResState(CRDRID ResId); bool bridgeDevice(CRDRID SrcId, CRDRID DstId, bool IsLink); // 双向连接/断开设备 bool bridgeDevice(CChannelResource* pChanSrc, CChannelResource* pChanDst, bool IsLink, bool IsOneWay); // 操作 bool channelListen(CRDRID SrcId, CRDRID PeerId, CRDRID DstId, bool IsLink); // 监听指定线路 bool meetingListen(CRDRID DstId, MeetingInfo& MeetingId, bool IsLink); // 监听指定会议 bool meetingMute(CRDRID DstId, MeetingInfo& MeetingId, bool IsOff); // 静音会议中线路 bool meetingRemove(COneLeg* pLeg, MeetingInfo& MeetingId); // 线路离开会议 bool meetingRecord(COneLeg* pLeg, MeetingInfo& MeetingId, RecordContent* pContent, bool IsStop); // 线路操作接口 void setSessionInfo2Line(CRDRID LineId, long SessionCode); // 设定当前线路关联的会话 bool startRecord(CRDRID LineId, RecordContent* pContent); // 线路录音启动 bool stopRecord(CRDRID LineId); // 线路录音结束 bool move2Meeting(CRDRID LineId, MeetingInfo& MeetId, bool IsOneWay); // 线路加入会议 bool removeFromMeeting(CRDRID LineId, MeetingInfo& MeetId); // 线路离开会议 bool playSound(CRDRID LineId, PlayVoiceContent* pContent); // 线路放音收号 bool playStop(CRDRID LineId); // 线路停止放音 bool dropCall(CRDRID LineId, bool IsPassive); // 线路挂机操作处理 bool dial(CRDRID LineId, LPCTSTR Callee, LPCTSTR Caller, int AccountId); // 线路拨号启动 bool answer(CRDRID LineId); // 应答呼叫 bool offHook(CRDRID LineId, bool IgnoreSession, LPCTSTR CallerNum = NULL); // 通知内线摘机(只对内线有效) bool fax(CRDRID LineId, LPCTSTR lpFileName, bool IsRecv); // 传真启动(只对外线有效) bool selfCheck(CRDRID LineId); // 线路自检(只对模拟外线有效) bool playTone(CRDRID LineId, int Type); // 线路播放信号音 bool createMeeting(CRDRID LineId, MeetingInfo& MeetInfo); // 创建会议 void deleteMeeting(MeetingInfo& MeetInfo); // 删除会议 void freeChanResource(CRDRID LineId); // 释放通道绑定资源 private: CMC(void); LPCTSTR __translateResType(DEV_RES_TYPE ResType) const; CPBX* __getPbx(int IsxNo); CPBX* __newPbx(int IsxNo); void __freePbx(void); void __regExten2Dev(void); // 系统事件处理函数 void __onSipUserNew(void); void __onSipUserDel(void); void __procResourceStateUpdate(INT EvtType, SYS_EVT_DATA* pEvtData); void __procResourceAlarm(INT EvtType, SYS_EVT_DATA* pEvtData); void __procResourceCapacity(INT EvtType, SYS_EVT_DATA* pEvtData); void __procVoiceEvent(METAEVENT* pMetaEvent); void __procIpmEvent(METAEVENT* pMetaEvent); void __procFaxEvent(METAEVENT* pMetaEvent); void __procSipRegSent(void); void __procSipRegAck(void); void __procSipTransaction(void); void __onGcEvent(METAEVENT* pMetaEvent); void __onSysEvent(METAEVENT* pMetaEvent); static UINT __pbxEvtThread(LPVOID pParam); // 处理消息事件线程函数 private: //Dsp节点号 int m_DspIsxNo; // 类对象实现相关 volatile bool m_Stop; CWinThread* m_pThreadObj; // 属性相关 UINT m_state; // 设备成员 CArray m_PbxList; CPrdVirtualDevice m_PrdDev; CFaxVirtualDevice m_FaxDev; };