| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- #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;
- }
|