| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155 |
- #include "StdAfx.h"
- #include "NetworkVs.h"
- #include "DeviceMgr.h"
- #include "Config.h"
- SINGLETON_IMPLEMENT(CNetworkVs)
- CNetworkVs::CNetworkVs(void)
- {
- }
- CNetworkVs::~CNetworkVs(void)
- {
- }
- /*****************************************************************
- **【函数名称】 __onDisconnect
- **【函数功能】 连接断开处理
- **【参数】
- **【返回值】
- ****************************************************************/
- void CNetworkVs::__onDisconnect()
- {
- CDeviceMgr::GetInstance().hangupAllLine();
- }
- /*****************************************************************
- **【函数名称】 init
- **【函数功能】 初始化连接
- **【参数】
- **【返回值】
- ****************************************************************/
- bool CNetworkVs::init( void )
- {
- // 初始化命令配置
- #ifdef _DEBUG
- CPduDataFormat::getInstance()->Load("../NetLib/PDUFormat.ini"); //../NetLib/PDUFormat.ini
- #else
- CPduDataFormat::getInstance()->Load("./PDUFormat.ini");
- #endif
- // 订阅sckoet连接和通讯事件
- IPduLink* pPduLink = CInterfaceWindow::getLinkInstance();
- IPduComm* pPduComm = CInterfaceWindow::getCommInstance();
- pPduLink->RegistPduLinkProc(this, TRUE);
- pPduComm->RegistPduCommProc(this, TRUE);
- // 获取Cti服务器ip和端口
- CString Ip = CConfig::ctiIp();
- int Port = CConfig::ctiPort();
- // 创建scoket客户端
- int nDevType = CDeviceMgr::GetInstance().getDevType();
- if(nDevType == 0)
- {
- ILogger::getInstance().log(LOG_CLASS_SOCKET, LOG_LEVEL_ERROR, _T("{Net}: 网络环境初始化失败, 无法获取本地连接类型"));
- return false;
- }
-
- // 连接到CTI
- if(pPduLink->CreatePduClient(Ip, Port, static_cast <PDU_DEV_TYPE>(nDevType), 0, PDU_DEV_TYPE_CTI, 0, true))
- {
- ILogger::getInstance().log(LOG_CLASS_SOCKET, LOG_LEVEL_NORMAL, _T("{Net}: 网络环境初始化成功"));
- return true;
- }
- else
- {
- ILogger::getInstance().log(LOG_CLASS_SOCKET, LOG_LEVEL_ERROR, _T("{Net}: 连接CTI服务器[%s:%d]失败, 请检查网络配置是否正常"), Ip, Port);
- return false;
- }
- }
- /*****************************************************************
- **【函数名称】 release
- **【函数功能】 释放连接
- **【参数】
- **【返回值】
- ****************************************************************/
- void CNetworkVs::release( void )
- {
- CInterfaceWindow::getLinkInstance()->StopAll();
- }
- /*****************************************************************
- **【函数名称】 SendCmdToCti
- **【函数功能】 给CTI发送命令
- **【参数】
- **【返回值】
- ****************************************************************/
- bool CNetworkVs::sendPduToCti( CPduEntity* a_pPduEntity )
- {
- ASSERT(a_pPduEntity != NULL);
- return CInterfaceWindow::getCommInstance()->Send(a_pPduEntity, PDU_DEV_TYPE_CTI, 0) == TRUE;
- }
- /*****************************************************************
- **【函数名称】 OnRecvCommand
- **【函数功能】 命令接收初步处理
- **【参数】
- **【返回值】
- ****************************************************************/
- void CNetworkVs::OnRecvCommand( CPduEntity* a_pPduEntity )
- {
- ASSERT(a_pPduEntity != NULL);
- PDU_CMD_TYPE Type = a_pPduEntity->GetCmdType();
- // 注册命令返回以及心跳包不处理
- if(Type == PDU_CMD_REG || Type == PDU_CMD_LISTEN)
- return;
- // 设备管理类处理命令
- CDeviceMgr::GetInstance().procCmd(a_pPduEntity);
- }
- /*****************************************************************
- **【函数名称】 OnLinkStateChanged
- **【函数功能】 连接状态改变处理
- **【参数】
- **【返回值】
- ****************************************************************/
- void CNetworkVs::OnLinkStateChanged( const PduLinkContent& linkContent )
- {
- // 连接状态变化分析
- switch(linkContent.nLinkState)
- {
- case PDU_LINK_STATE_SUCCESSED:
- ILogger::getInstance().log(LOG_CLASS_SOCKET, LOG_LEVEL_NORMAL, _T("{Net}: 连接CTI成功"));
- break;
- case PDU_LINK_STATE_FAILED:
- ILogger::getInstance().log(LOG_CLASS_SOCKET, LOG_LEVEL_ERROR, _T("{Net}: 连接CTI失败"));
- break;
- case PDU_LINK_STATE_REG_OK:
- ILogger::getInstance().log(LOG_CLASS_SOCKET, LOG_LEVEL_NORMAL, _T("{Net}: 注册CTI成功, 可以进行通讯"));
- break;
- case PDU_LINK_STATE_REG_FAILED:
- ILogger::getInstance().log(LOG_CLASS_SOCKET, LOG_LEVEL_ERROR, _T("{Net}: 注册CTI失败, 通讯被禁止"));
- break;
- case PDU_LINK_STATE_DISCONNECTED:
- ILogger::getInstance().log(LOG_CLASS_SOCKET, LOG_LEVEL_ERROR, _T("{Net}: 与CTI连接中断"));
- __onDisconnect();
- break;
- default:
- break;
- }
- }
|