#include "StdAfx.h" #include "LineFactory.h" #include "TrunkDt.h" #include "TapiLineExten.h" #include "TapiLineFax.h" #include "TapiLineIvr.h" #include "TrunkDt.h" #include "TrunkAna.h" #include "TrunkH323.h" #include "TrunkSip.h" #include "TrunkContainer.h" #include "DevControl.h" CLineFactory::CLineFactory(void) { } CLineFactory::~CLineFactory(void) { } /***************************************************************** **【函数名称】 makeTrunkLine **【函数功能】 创建中继线路 **【参数】 **【返回值】 ****************************************************************/ bool CLineFactory::makeTrunkLine( void ) { CString SQL; SQL.Format(_T("SELECT name, value FROM conf_vs WHERE name = '%s' OR name = '%s' OR name = '%s' OR name = '%s'"), CONST_IPO_LINE_TYPE_DT, CONST_IPO_LINE_TYPE_ANA, CONST_IPO_LINE_TYPE_H323, CONST_IPO_LINE_TYPE_SIP); COtlConnection* pDbControl = COtlConnection::GetOtlInstence(); // 从数据库中读取中继线配置信息 COtlRecordset *pRecord = pDbControl->QueryRecords(SQL); if(NULL == pRecord) return false; CString TrunkName; CString TrunkIdFromDb; CTrunkBase* pTrunk = NULL; //遍历结果集 while(!pRecord->IsEOF()) { pRecord->MoveNextRow(); // 得到线路ID TrunkIdFromDb = pRecord->GetValueStr("value"); UINT LineId = 0; UINT PcmId = 0; sscanf_s(TrunkIdFromDb, _T("%lu.%lu"), &LineId, &PcmId); // 模拟中继PcmId应为零 UINT TrunkId = LineId * CONST_IPO_DTC_SEED + PcmId; // 得到线路类型 TrunkName = pRecord->GetValueStr("name"); if(TrunkName == CONST_IPO_LINE_TYPE_DT) { CTrunkContainer::registTrunk(LineId, TRUNK_DT); pTrunk = new CTrunkDt(TrunkId); } else if(TrunkName == CONST_IPO_LINE_TYPE_H323) { CTrunkContainer::registTrunk(LineId, TRUNK_H323); pTrunk = new CTrunkH323(TrunkId); } else if(TrunkName == CONST_IPO_LINE_TYPE_ANA) { CTrunkContainer::registTrunk(LineId, TRUNK_ANA); pTrunk = new CTrunkAna(TrunkId); } else if(TrunkName == CONST_IPO_LINE_TYPE_SIP) { CTrunkContainer::registTrunk(LineId, TRUNK_SIP); pTrunk = new CTrunkSip(TrunkId); } else { ASSERT(FALSE); pTrunk = NULL; } if(pTrunk != NULL) { CTrunkContainer::addTrunk(pTrunk); pTrunk->regist(); } } // end while COtlRecordset::DestroyInstance(pRecord); // 释放数据库资源 return true; } /***************************************************************** **【函数名称】 makeTapiLine **【函数功能】 创建TAPI线路 **【参数】 **【返回值】 ****************************************************************/ CTapiLine* CLineFactory::makeTapiLine( DWORD DevID, HLINE LineHandle, DWORD ApiVersion, HLINEAPP LineApp, LPCTSTR ExtID ) { CString SQL; // 是否为座席分机 COtlConnection* pDbControl = COtlConnection::GetOtlInstence(); SQL.Format(_T("SELECT value FROM conf_vs WHERE name = '%s' AND Value = '%s'"), CONST_IPO_LINE_TYPE_EXT, ExtID); if("" != pDbControl->GetSingleDataStr(SQL)) { return new CTapiLineExten(DevID, LineHandle, ApiVersion, ExtID, LineApp); } // 是否为IVR分机 SQL.Format("SELECT value FROM conf_vs WHERE name = '%s' AND Value = '%s'", CONST_IPO_LINE_TYPE_IVR, ExtID); if("" != pDbControl->GetSingleDataStr(SQL)) { return new CTapiLineIvr(DevID, LineHandle, ApiVersion, ExtID, LineApp); } // 是否为传真分机 SQL.Format("SELECT value FROM conf_vs WHERE name = '%s' AND Value = '%s'", CONST_IPO_LINE_TYPE_FAX, ExtID); if("" != pDbControl->GetSingleDataStr(SQL)) { return new CTapiLineFax(DevID, LineHandle, ApiVersion, ExtID, LineApp); } return NULL; }