112 lines
3.1 KiB
C++
112 lines
3.1 KiB
C++
|
|
#include "StdAfx.h"
|
|
#include "JobInvoker.h"
|
|
#include "JCCInquireSalesVersion.hpp"
|
|
#include "CJCCInquire.hpp"
|
|
#include "JCCBuyProduct.hpp"
|
|
#include "JCCGiftProduct.hpp"
|
|
#include "JCCStorageList.hpp"
|
|
#include "JCCStorageUse.hpp"
|
|
|
|
CJobInvoker::CJobInvoker(void)
|
|
: m_pShopDBFactory(NULL)
|
|
{
|
|
m_pShopDBFactory = new CShopDBProcFactory;
|
|
}
|
|
|
|
CJobInvoker::~CJobInvoker(void)
|
|
{
|
|
RemoveConCreateCommands();
|
|
if(m_pShopDBFactory) delete m_pShopDBFactory, m_pShopDBFactory = NULL;
|
|
}
|
|
|
|
void CJobInvoker::SetJobCommand(CConfig& clsConfig)
|
|
{
|
|
InsertConCreateCommands();
|
|
|
|
if(0 != (clsConfig.getShopDB_IPAddress())[0])
|
|
{
|
|
m_pShopDBFactory->SetDBConnectionInfo( clsConfig.getShopDB_IPAddress(),
|
|
clsConfig.getShopDB_PortNum(),
|
|
clsConfig.getShopDB_Name(),
|
|
clsConfig.getShopDB_UserName(),
|
|
clsConfig.getShopDB_PassWord(),
|
|
clsConfig.getShopDB_TimeOut(),
|
|
false);
|
|
|
|
BILLING_LOG(WZPUBLIC::LEVEL_INFO, "商城数据库: IP(%s), 数据库名(%s)",
|
|
clsConfig.getShopDB_IPAddress(), clsConfig.getShopDB_Name());
|
|
}
|
|
|
|
}
|
|
|
|
void CJobInvoker::InsertConCreateCommand(DWORD key, CJobCommand* value)
|
|
{
|
|
std::pair<CONCRETE_COMMAND_MAP::iterator, bool> result =
|
|
m_ConcreteCommand.insert(CONCRETE_COMMAND_MAP::value_type(key, value));
|
|
|
|
if(!result.second)
|
|
{
|
|
BILLING_LOG(WZPUBLIC::LEVEL_ERROR, "任务处理实例命令插入失败 (%ld)", key);
|
|
}
|
|
}
|
|
|
|
void CJobInvoker::InsertConCreateCommands()
|
|
{
|
|
|
|
InsertConCreateCommand(JOB_SHOP_INQUIRE_SALESVERSION, new CJCCInquireSalesVersion); //版本查询
|
|
InsertConCreateCommand(JOB_SHOP_INQUIRE, new CJCCInquire); //点劵查询
|
|
InsertConCreateCommand(JOB_SHOP_BUYPRODUCT, new CJCCBuyProduct); //商品购买
|
|
InsertConCreateCommand(JOB_SHOP_GIFTPRODUCT, new CJCCGiftProduct); //礼物赠送
|
|
InsertConCreateCommand(JOB_SHOP_STORAGELIST, new CJCCStorageList); //保管盒查询
|
|
InsertConCreateCommand(JOB_SHOP_STORAGEUSE, new CJCCStorageUse); //保管盒子物品领取
|
|
InsertConCreateCommand(JOB_SHOP_STORAGEUSEALL, new CJCCStorageUseAll); //保管盒子物品全部领取
|
|
InsertConCreateCommand(JOB_SHOP_STORAGEUSEROLLBACK, new CJCCStorageUseRollback); //领取失败回档
|
|
}
|
|
|
|
void CJobInvoker::RemoveConCreateCommands()
|
|
{
|
|
for( CONCRETE_COMMAND_MAP::iterator iter = m_ConcreteCommand.begin() ; iter != m_ConcreteCommand.end() ; ++iter )
|
|
{
|
|
CJobCommand* pCommand = iter->second;
|
|
if( NULL != pCommand )
|
|
{
|
|
delete pCommand;
|
|
}
|
|
}
|
|
m_ConcreteCommand.clear();
|
|
}
|
|
|
|
void CJobInvoker::RunProc()
|
|
{
|
|
CShopJobBase* job = NULL;
|
|
|
|
if(_instance(CShopJobQueue)->pop(job))
|
|
{
|
|
CONCRETE_COMMAND_MAP::iterator iterFind = m_ConcreteCommand.find(job->jobcode);
|
|
job->bForceFalseReturn = false;
|
|
|
|
if(m_ConcreteCommand.end() == iterFind)
|
|
{
|
|
BILLING_LOG(WZPUBLIC::LEVEL_WARN, "未知任务 (%ld)", job->jobcode);
|
|
}
|
|
else
|
|
{
|
|
CShopDBProc* pShopProc = m_pShopDBFactory->GetShopDBProc(job->GameCode);
|
|
|
|
if(!pShopProc)
|
|
{
|
|
BILLING_LOG(WZPUBLIC::LEVEL_WARN, "数据库实例获取失败");
|
|
}
|
|
else
|
|
{
|
|
((CJobCommand*)iterFind->second)->Execute(pShopProc, job);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
void CJobInvoker::OnTimer(HANDLE hRequest, DWORD dwRequest)
|
|
{
|
|
}
|