142 lines
3.8 KiB
C++
142 lines
3.8 KiB
C++
|
||
#include "stdafx.h"
|
||
//#include "WinService.h"
|
||
#include "FileLogger.h"
|
||
|
||
|
||
|
||
CRobotManager* CRobotManager::s_pRobotManager =NULL;
|
||
|
||
|
||
|
||
#define ROBOT_KN_VERION MAKEFOURCC(1, 11, 9, 20) //机器人的版本号
|
||
|
||
extern const TCHAR szExceptionDumpFile[] = _T("./Robot.dmp");
|
||
BOOL SetupSessionManagerConfig(CRobotManager*);
|
||
VOID ServerMain(int argc, char **argv);
|
||
|
||
|
||
int main(int argc, char** argv)
|
||
{
|
||
//SetCurrentDirectory("../"); //CWinService里会把当前目录改成exe允许的目录,所以这里再转一下
|
||
CTimeProfMgr::getSingleton().InitMgr(); //性能统计
|
||
//SetUnhandledExceptionFilter( DefaultUnHandleExceptionFilter ); //异常处理
|
||
InitDefMsgOut();
|
||
|
||
#ifdef WIN32
|
||
SetCurrentDirectory("./");
|
||
#else
|
||
std::string filename(argv[1]);
|
||
size_t found = filename.find_last_of("/\\");
|
||
filename = filename.substr(0, found);
|
||
if( filename[0] == '.' && filename.length()==1 )
|
||
filename = "./" ;
|
||
SetCurrentDirectory(filename.c_str());
|
||
#endif
|
||
ServerMain(argc, argv);
|
||
|
||
UninitDefMsgOut();
|
||
#ifdef _MLIB_DUMP_MEMORY_LEAKS_
|
||
_CrtDumpMemoryLeaks();
|
||
#endif
|
||
|
||
return 0;
|
||
}
|
||
|
||
BOOL SetupRobotManagerConfig(CRobotManager *lpSSManager, const char * sConfigFile)
|
||
{
|
||
CRobotConfig config;
|
||
return config.loadConfig(lpSSManager, sConfigFile);
|
||
}
|
||
|
||
|
||
|
||
VOID ServerMain(int argc, char **argv)
|
||
{
|
||
const char * sConfigFile = NULL;
|
||
if (argc > 0)
|
||
{
|
||
//sConfigFile = argv[1];
|
||
//sConfigFile = _T("data/robot/RobotConfig.txt");//argv[1];
|
||
}
|
||
//主线程的代码
|
||
INT_PTR nError;
|
||
TCHAR sCmdBuf[512];
|
||
//CRobotManager *pSSManager;
|
||
CFileLogger flog(_T("./log/Robot_%s.log.txt"), getCurrentTimeDesc());
|
||
//CFileLogger flog(_T("Robot.log.html"));
|
||
|
||
//pSSManager = new CRobotManager();
|
||
if(CRobotManager::s_pRobotManager !=NULL ) return;
|
||
CRobotManager::s_pRobotManager = new(CRobotManager);
|
||
|
||
winitseed((unsigned int)_getTickCount()); //初始化随机数函数
|
||
OutputMsg( rmTip, _T("Starting Robot, Waiting.."));
|
||
if ( SetupRobotManagerConfig(CRobotManager::s_pRobotManager, sConfigFile) )
|
||
{
|
||
char* sTitleName = CRobotManager::s_pRobotManager->m_sConsoleName;
|
||
//GetRobotMgr()->GetGlobalConfig().convertToACP(CRobotManager::s_pRobotManager->m_sConsoleName, sizeof(CRobotManager::s_pRobotManager->m_sConsoleName), sTitleName, ArrayCount(sTitleName));
|
||
sprintf_s(sTitleName, "%s-%d", sTitleName, GetCurrentProcessId());
|
||
SetConsoleTitle(sTitleName);
|
||
if ( CRobotManager::s_pRobotManager->Startup() )
|
||
{
|
||
in_addr ia;
|
||
OutputMsg( rmTip, _T("-------------------------------------------") );
|
||
OutputMsg( rmTip, _T("Robot 启动成功,核心版本号是%s"), inet_ntoa(ia) );
|
||
OutputMsg( rmTip, _T("quit - 停止测试并退出程序") );
|
||
OutputMsg( rmTip, _T("count -查看当前的在线情况") );
|
||
OutputMsg( rmTip, _T("dmp -输出dmp信息") );
|
||
OutputMsg( rmTip, _T("-------------------------------------------") );
|
||
|
||
while ( TRUE )
|
||
{
|
||
_getts(sCmdBuf);
|
||
//滤掉末尾的换行符
|
||
nError = (int)strlen(sCmdBuf);
|
||
while ( nError > 0 && sCmdBuf[nError-1] < 0x20 )
|
||
{
|
||
nError--;
|
||
sCmdBuf[nError] = 0;
|
||
}
|
||
|
||
//退出命令
|
||
if ( _tcsncicmp(sCmdBuf, _T("\\q"), 2) == 0
|
||
|| _tcsncicmp(sCmdBuf, _T("exit"), 4) == 0
|
||
|| _tcsncicmp(sCmdBuf, _T("quit"), 4) == 0 )
|
||
{
|
||
OutputMsg( rmTip, _T("正在停止Robot...") );
|
||
break;
|
||
}
|
||
else if ( _tcsncicmp(sCmdBuf, _T("count"), 5) == 0 )
|
||
{
|
||
CRobotManager::s_pRobotManager->ShowServerAgentCount();
|
||
}
|
||
else if(_tcsncicmp(sCmdBuf, "dmp", 3) == 0)
|
||
{
|
||
DebugBreak();
|
||
}
|
||
Sleep(10);
|
||
}
|
||
|
||
CRobotManager::s_pRobotManager->Shutdown();
|
||
//Sleep(3000); //等所有的线程都退出
|
||
}
|
||
else
|
||
{
|
||
OutputMsg(rmError, _T("启动失败"));
|
||
char c;
|
||
scanf(&c,"%c");
|
||
}
|
||
}
|
||
else
|
||
{
|
||
OutputMsg(rmError, _T("读取配置文件失败"));
|
||
char c;
|
||
scanf(&c,"%c");
|
||
}
|
||
|
||
delete CRobotManager::s_pRobotManager;
|
||
CRobotManager::s_pRobotManager=NULL;
|
||
}
|
||
|