Files
2022-10-26 12:25:11 +08:00

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)
{
}