142 lines
3.1 KiB
C++
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();
|
|
|
|
} |