中间件标准版5.1git,去除基础模块

NetworkVs.cpp 4.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. #include "StdAfx.h"
  2. #include "NetworkVs.h"
  3. #include "DeviceMgr.h"
  4. #include "Config.h"
  5. SINGLETON_IMPLEMENT(CNetworkVs)
  6. CNetworkVs::CNetworkVs(void)
  7. {
  8. }
  9. CNetworkVs::~CNetworkVs(void)
  10. {
  11. }
  12. /*****************************************************************
  13. **【函数名称】 __onDisconnect
  14. **【函数功能】 连接断开处理
  15. **【参数】
  16. **【返回值】
  17. ****************************************************************/
  18. void CNetworkVs::__onDisconnect()
  19. {
  20. CDeviceMgr::GetInstance().hangupAllLine();
  21. }
  22. /*****************************************************************
  23. **【函数名称】 init
  24. **【函数功能】 初始化连接
  25. **【参数】
  26. **【返回值】
  27. ****************************************************************/
  28. bool CNetworkVs::init( void )
  29. {
  30. // 初始化命令配置
  31. #ifdef _DEBUG
  32. CPduDataFormat::getInstance()->Load("../NetLib/PDUFormat.ini"); //../NetLib/PDUFormat.ini
  33. #else
  34. CPduDataFormat::getInstance()->Load("./PDUFormat.ini");
  35. #endif
  36. // 订阅sckoet连接和通讯事件
  37. IPduLink* pPduLink = CInterfaceWindow::getLinkInstance();
  38. IPduComm* pPduComm = CInterfaceWindow::getCommInstance();
  39. pPduLink->RegistPduLinkProc(this, TRUE);
  40. pPduComm->RegistPduCommProc(this, TRUE);
  41. // 获取Cti服务器ip和端口
  42. CString Ip = CConfig::ctiIp();
  43. int Port = CConfig::ctiPort();
  44. // 创建scoket客户端
  45. int nDevType = CDeviceMgr::GetInstance().getDevType();
  46. if(nDevType == 0)
  47. {
  48. ILogger::getInstance().log(LOG_CLASS_SOCKET, LOG_LEVEL_ERROR, _T("{Net}: 网络环境初始化失败, 无法获取本地连接类型"));
  49. return false;
  50. }
  51. // 连接到CTI
  52. if(pPduLink->CreatePduClient(Ip, Port, static_cast <PDU_DEV_TYPE>(nDevType), 0, PDU_DEV_TYPE_CTI, 0, true))
  53. {
  54. ILogger::getInstance().log(LOG_CLASS_SOCKET, LOG_LEVEL_NORMAL, _T("{Net}: 网络环境初始化成功"));
  55. return true;
  56. }
  57. else
  58. {
  59. ILogger::getInstance().log(LOG_CLASS_SOCKET, LOG_LEVEL_ERROR, _T("{Net}: 连接CTI服务器[%s:%d]失败, 请检查网络配置是否正常"), Ip, Port);
  60. return false;
  61. }
  62. }
  63. /*****************************************************************
  64. **【函数名称】 release
  65. **【函数功能】 释放连接
  66. **【参数】
  67. **【返回值】
  68. ****************************************************************/
  69. void CNetworkVs::release( void )
  70. {
  71. CInterfaceWindow::getLinkInstance()->StopAll();
  72. }
  73. /*****************************************************************
  74. **【函数名称】 SendCmdToCti
  75. **【函数功能】 给CTI发送命令
  76. **【参数】
  77. **【返回值】
  78. ****************************************************************/
  79. bool CNetworkVs::sendPduToCti( CPduEntity* a_pPduEntity )
  80. {
  81. ASSERT(a_pPduEntity != NULL);
  82. return CInterfaceWindow::getCommInstance()->Send(a_pPduEntity, PDU_DEV_TYPE_CTI, 0) == TRUE;
  83. }
  84. /*****************************************************************
  85. **【函数名称】 OnRecvCommand
  86. **【函数功能】 命令接收初步处理
  87. **【参数】
  88. **【返回值】
  89. ****************************************************************/
  90. void CNetworkVs::OnRecvCommand( CPduEntity* a_pPduEntity )
  91. {
  92. ASSERT(a_pPduEntity != NULL);
  93. PDU_CMD_TYPE Type = a_pPduEntity->GetCmdType();
  94. // 注册命令返回以及心跳包不处理
  95. if(Type == PDU_CMD_REG || Type == PDU_CMD_LISTEN)
  96. return;
  97. // 设备管理类处理命令
  98. CDeviceMgr::GetInstance().procCmd(a_pPduEntity);
  99. }
  100. /*****************************************************************
  101. **【函数名称】 OnLinkStateChanged
  102. **【函数功能】 连接状态改变处理
  103. **【参数】
  104. **【返回值】
  105. ****************************************************************/
  106. void CNetworkVs::OnLinkStateChanged( const PduLinkContent& linkContent )
  107. {
  108. // 连接状态变化分析
  109. switch(linkContent.nLinkState)
  110. {
  111. case PDU_LINK_STATE_SUCCESSED:
  112. ILogger::getInstance().log(LOG_CLASS_SOCKET, LOG_LEVEL_NORMAL, _T("{Net}: 连接CTI成功"));
  113. break;
  114. case PDU_LINK_STATE_FAILED:
  115. ILogger::getInstance().log(LOG_CLASS_SOCKET, LOG_LEVEL_ERROR, _T("{Net}: 连接CTI失败"));
  116. break;
  117. case PDU_LINK_STATE_REG_OK:
  118. ILogger::getInstance().log(LOG_CLASS_SOCKET, LOG_LEVEL_NORMAL, _T("{Net}: 注册CTI成功, 可以进行通讯"));
  119. break;
  120. case PDU_LINK_STATE_REG_FAILED:
  121. ILogger::getInstance().log(LOG_CLASS_SOCKET, LOG_LEVEL_ERROR, _T("{Net}: 注册CTI失败, 通讯被禁止"));
  122. break;
  123. case PDU_LINK_STATE_DISCONNECTED:
  124. ILogger::getInstance().log(LOG_CLASS_SOCKET, LOG_LEVEL_ERROR, _T("{Net}: 与CTI连接中断"));
  125. __onDisconnect();
  126. break;
  127. default:
  128. break;
  129. }
  130. }