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

LineFactory.cpp 3.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. #include "StdAfx.h"
  2. #include "LineFactory.h"
  3. #include "TrunkDt.h"
  4. #include "TapiLineExten.h"
  5. #include "TapiLineFax.h"
  6. #include "TapiLineIvr.h"
  7. #include "TrunkDt.h"
  8. #include "TrunkAna.h"
  9. #include "TrunkH323.h"
  10. #include "TrunkSip.h"
  11. #include "TrunkContainer.h"
  12. #include "DevControl.h"
  13. CLineFactory::CLineFactory(void)
  14. {
  15. }
  16. CLineFactory::~CLineFactory(void)
  17. {
  18. }
  19. /*****************************************************************
  20. **【函数名称】 makeTrunkLine
  21. **【函数功能】 创建中继线路
  22. **【参数】
  23. **【返回值】
  24. ****************************************************************/
  25. bool CLineFactory::makeTrunkLine( void )
  26. {
  27. CString SQL;
  28. SQL.Format(_T("SELECT name, value FROM conf_vs WHERE name = '%s' OR name = '%s' OR name = '%s' OR name = '%s'"),
  29. CONST_IPO_LINE_TYPE_DT, CONST_IPO_LINE_TYPE_ANA, CONST_IPO_LINE_TYPE_H323, CONST_IPO_LINE_TYPE_SIP);
  30. COtlConnection* pDbControl = COtlConnection::GetOtlInstence();
  31. // 从数据库中读取中继线配置信息
  32. COtlRecordset *pRecord = pDbControl->QueryRecords(SQL);
  33. if(NULL == pRecord)
  34. return false;
  35. CString TrunkName;
  36. CString TrunkIdFromDb;
  37. CTrunkBase* pTrunk = NULL;
  38. //遍历结果集
  39. while(!pRecord->IsEOF())
  40. {
  41. pRecord->MoveNextRow();
  42. // 得到线路ID
  43. TrunkIdFromDb = pRecord->GetValueStr("value");
  44. UINT LineId = 0;
  45. UINT PcmId = 0;
  46. sscanf_s(TrunkIdFromDb, _T("%lu.%lu"), &LineId, &PcmId);
  47. // 模拟中继PcmId应为零
  48. UINT TrunkId = LineId * CONST_IPO_DTC_SEED + PcmId;
  49. // 得到线路类型
  50. TrunkName = pRecord->GetValueStr("name");
  51. if(TrunkName == CONST_IPO_LINE_TYPE_DT)
  52. {
  53. CTrunkContainer::registTrunk(LineId, TRUNK_DT);
  54. pTrunk = new CTrunkDt(TrunkId);
  55. }
  56. else if(TrunkName == CONST_IPO_LINE_TYPE_H323)
  57. {
  58. CTrunkContainer::registTrunk(LineId, TRUNK_H323);
  59. pTrunk = new CTrunkH323(TrunkId);
  60. }
  61. else if(TrunkName == CONST_IPO_LINE_TYPE_ANA)
  62. {
  63. CTrunkContainer::registTrunk(LineId, TRUNK_ANA);
  64. pTrunk = new CTrunkAna(TrunkId);
  65. }
  66. else if(TrunkName == CONST_IPO_LINE_TYPE_SIP)
  67. {
  68. CTrunkContainer::registTrunk(LineId, TRUNK_SIP);
  69. pTrunk = new CTrunkSip(TrunkId);
  70. }
  71. else
  72. {
  73. ASSERT(FALSE);
  74. pTrunk = NULL;
  75. }
  76. if(pTrunk != NULL)
  77. {
  78. CTrunkContainer::addTrunk(pTrunk);
  79. pTrunk->regist();
  80. }
  81. } // end while
  82. COtlRecordset::DestroyInstance(pRecord); // 释放数据库资源
  83. return true;
  84. }
  85. /*****************************************************************
  86. **【函数名称】 makeTapiLine
  87. **【函数功能】 创建TAPI线路
  88. **【参数】
  89. **【返回值】
  90. ****************************************************************/
  91. CTapiLine* CLineFactory::makeTapiLine( DWORD DevID, HLINE LineHandle, DWORD ApiVersion, HLINEAPP LineApp, LPCTSTR ExtID )
  92. {
  93. CString SQL;
  94. // 是否为座席分机
  95. COtlConnection* pDbControl = COtlConnection::GetOtlInstence();
  96. SQL.Format(_T("SELECT value FROM conf_vs WHERE name = '%s' AND Value = '%s'"), CONST_IPO_LINE_TYPE_EXT, ExtID);
  97. if("" != pDbControl->GetSingleDataStr(SQL))
  98. {
  99. return new CTapiLineExten(DevID, LineHandle, ApiVersion, ExtID, LineApp);
  100. }
  101. // 是否为IVR分机
  102. SQL.Format("SELECT value FROM conf_vs WHERE name = '%s' AND Value = '%s'", CONST_IPO_LINE_TYPE_IVR, ExtID);
  103. if("" != pDbControl->GetSingleDataStr(SQL))
  104. {
  105. return new CTapiLineIvr(DevID, LineHandle, ApiVersion, ExtID, LineApp);
  106. }
  107. // 是否为传真分机
  108. SQL.Format("SELECT value FROM conf_vs WHERE name = '%s' AND Value = '%s'", CONST_IPO_LINE_TYPE_FAX, ExtID);
  109. if("" != pDbControl->GetSingleDataStr(SQL))
  110. {
  111. return new CTapiLineFax(DevID, LineHandle, ApiVersion, ExtID, LineApp);
  112. }
  113. return NULL;
  114. }