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

142 lines
3.1 KiB
C++

#include "StdAfx.h"
#include "ShopMain.h"
#include "JobInvoker.h"
#include "CashShop.h"
CShopMain::CShopMain(void)
:m_ListVersion(NULL)
{
}
void CShopMain::ErrorHandler( DWORD lastError, char* desc )
{
BILLING_LOG(WZPUBLIC::LEVEL_ERROR, "%s (%u)", desc, lastError);
}
CShopMain::~CShopMain(void)
{
_releaseinstance(WZPUBLIC::WinService);
_releaseinstance(CShopJobQueue);
_releaseinstance(WZPUBLIC::CLog);
if(m_ListVersion)
{
delete m_ListVersion;
m_ListVersion=NULL;
}
}
void CShopMain::CreateLog(bool bLogMode)
{
char szModuleName[MAX_PATH];
::GetModuleFileName( NULL, szModuleName, MAX_PATH );
*(strrchr( szModuleName, '\\' ) ) = 0;
strcat(szModuleName, "\\Logs");
if(INVALID_FILE_ATTRIBUTES == GetFileAttributes(szModuleName))
{
CreateDirectory(szModuleName, NULL);
}
strcat(szModuleName, "\\Shop.log");
USES_CONVERSION;
wchar_t* szFilepath = A2W(szModuleName);
WZPUBLIC::LOG_LEVEL level;
switch(m_clsConfig.getLogType())
{
case 1: level = WZPUBLIC::LEVEL_ERROR; break;
case 2: level = WZPUBLIC::LEVEL_WARN; break;
case 3: level = WZPUBLIC::LEVEL_INFO; break;
default: level = WZPUBLIC::LEVEL_OFF; break;
}
_instance(WZPUBLIC::CLog)->CreateLog(szFilepath, bLogMode);
_instance(WZPUBLIC::CLog)->SetLevel(level);
}
void CShopMain::ConSoleMsgRoop()
{
char sBuf[MAX_PATH];
while(true)
{
gets(sBuf);
if(0 == _stricmp(sBuf, "q") || 0 == _stricmp(sBuf, "quit"))
{
break;
}
}
}
bool CShopMain::OnServiceStart()
{
BILLING_LOG(WZPUBLIC::LEVEL_ALL, "商城服务开启-版本[%s] %s %", VERSION_SUNSHOP, __DATE__, __TIME__ );
return _instance(CShopMain)->ServerStart();
}
void CShopMain::OnServiceStop()
{
BILLING_LOG(WZPUBLIC::LEVEL_INFO, "商城服务关闭");
_instance(CShopMain)->ServerStop();
}
bool CShopMain::ServerStart()
{
if(!m_clsConfig.LoadFile())
{
BILLING_LOG(WZPUBLIC::LEVEL_ERROR, "配置文件不存在");
return false;
}
m_clsConfig.SetData();
CreateLog(true);
BILLING_LOG(WZPUBLIC::LEVEL_ALL, "商城服务开启-版本[%s] %s %s", VERSION_SUNSHOP, __DATE__, __TIME__ );
_instance(CProtocolInvoker)->SetProtocalCommand();
for(DWORD i = 0 ; i < m_clsConfig.getDBThreadCnt() ; i++)
{
CJobInvoker* jobinvoker = new CJobInvoker;
jobinvoker->SetJobCommand(m_clsConfig);
m_dbpool.AddJobThread(jobinvoker);
}
BILLING_LOG(WZPUBLIC::LEVEL_INFO, "已创建商城线程(%d)", m_clsConfig.getDBThreadCnt());
if(!WBANetwork::Initialize(0, CShopMain::ErrorHandler))
{
BILLING_LOG(WZPUBLIC::LEVEL_ERROR, "网络初始化失败");
return false;
}
if(!m_Network.Create((WORD)m_clsConfig.getMaxSessionCount(), &m_SessionMgr, (WORD)m_clsConfig.getIOThreadCount(), 0))
{
BILLING_LOG(WZPUBLIC::LEVEL_ERROR, "网络创建失败");
return false;
}
if(!m_Network.OpenAcceptor(m_clsConfig.getIPAddress(), (u_short)m_clsConfig.getPortNum()))
{
BILLING_LOG(WZPUBLIC::LEVEL_ERROR, "网络监听失败");
return false;
}
if(!_instance(ConvenienceStore::CashShop)->BuildShopList(GetConfig()))
{
BILLING_LOG(WZPUBLIC::LEVEL_ERROR, "脚本加载失败");
return false;
}
ConSoleMsgRoop();
return true;
}
void CShopMain::ServerStop()
{
m_dbpool.AllStopJobThread();
m_Network.CloseAcceptor();
m_Network.Destroy();
}