int ACE_TMAIN(int argc, ACE_TCHAR* argv[])
{
	if(argc > 0)
	{
		OUR_DEBUG((LM_INFO, "[main]argc = %d.\n", argc));
		for(int i = 0; i < argc; i++)
		{
			OUR_DEBUG((LM_INFO, "[main]argc(%d) = %s.\n", argc, argv[i]));
		}
	}

	//首先设置当前工作路径
	SetAppPath();

	//读取配置文件
	if(!App_MainConfig::instance()->Init())
	{
		OUR_DEBUG((LM_INFO, "[main]%s\n", App_MainConfig::instance()->GetError()));
	}
	else
	{
		App_MainConfig::instance()->Display();
	}

	//隐式加载PacketParse
	bool blState = App_PacketParseLoader::instance()->LoadPacketInfo(App_MainConfig::instance()->GetPacketParseInfo()->m_szPacketParseName);
	if(true == blState)
	{
		//判断是否是需要以服务的状态启动
		if(App_MainConfig::instance()->GetServerType() == 1)
		{
			OUR_DEBUG((LM_INFO, "[main]Procress is run background.\n"));
			//daemon(1,1);
			Gdaemon();
		}	

		//判断当前并行连接数是否支持框架
		//if(-1 == Checkfilelimit(App_MainConfig::instance()->GetMaxHandlerCount()))
		//{
		//	return 0;
		//}

		//判断当前Core文件尺寸是否需要调整
		if(-1 == CheckCoreLimit(App_MainConfig::instance()->GetCoreFileSize()))
		{
			return 0;
		}

		//设置监控信号量的线程
		WaitQuitSignal::init();

		pthread_t tid;
		pthread_attr_t attr;
		pthread_attr_init(&attr);	
		pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);

		pthread_create(&tid, &attr, thread_Monitor, NULL);		

		//第二步,启动主服务器监控
		if(!App_ServerManager::instance()->Init())
		{
			OUR_DEBUG((LM_INFO, "[main]App_ServerManager::instance()->Init() error.\n"));
			getchar();
		}

		OUR_DEBUG((LM_INFO, "[CServerManager::Start]Begin.\n"));
		if(!App_ServerManager::instance()->Start())
		{
			OUR_DEBUG((LM_INFO, "[main]App_ServerManager::instance()->Start() error.\n"));
			getchar();
		}

		OUR_DEBUG((LM_INFO, "[main]Server Run is End.\n"));

		ACE_Time_Value tvSleep(2, 0);
		ACE_OS::sleep(tvSleep);

		OUR_DEBUG((LM_INFO, "[main]Server Exit.\n"));

		pthread_exit(NULL);
	}
	
	return 0;
}
Beispiel #2
0
int ACE_TMAIN(int argc, ACE_TCHAR* argv[])
{
	if(argc > 0)
	{
		OUR_DEBUG((LM_INFO, "[main]argc = %d.\n", argc));
		for(int i = 0; i < argc; i++)
		{
			OUR_DEBUG((LM_INFO, "[main]argc(%d) = %s.\n", argc, argv[i]));
		}
	}

	//首先设置当前工作路径
	SetAppPath();

	//读取配置文件
	if(!App_MainConfig::instance()->Init())
	{
		OUR_DEBUG((LM_INFO, "[main]%s\n", App_MainConfig::instance()->GetError()));
	}
	else
	{
		App_MainConfig::instance()->Display();
	}

	/*
	#ifndef WIN32	
	    signal(SIGTERM, sig_term);
	#endif //WIN32
	*/

	//判断当前并行连接数是否支持框架
	if(-1 == Checkfilelimit(App_MainConfig::instance()->GetMaxHandlerCount()))
	{
		return 0;
	}

	//判断当前Core文件尺寸是否需要调整
	if(-1 == CheckCoreLimit(App_MainConfig::instance()->GetCoreFileSize()))
	{
		return 0;
	}

	//判断是否是需要以服务的状态启动
	if(App_MainConfig::instance()->GetServerType() == 1)
	{
		OUR_DEBUG((LM_INFO, "[main]Procress is run background.\n"));
		//ACE::daemonize();
		//daemonize();
		daemon(1,1);
	}

	//第二步,启动主服务器监控
	if(!App_ServerManager::instance()->Init())
	{
		OUR_DEBUG((LM_INFO, "[main]App_ServerManager::instance()->Init() error.\n"));
		getchar();
	}

	if(!App_ServerManager::instance()->Start())
	{
		OUR_DEBUG((LM_INFO, "[main]App_ServerManager::instance()->Start() error.\n"));
		getchar();
	}

	OUR_DEBUG((LM_INFO, "[main]Server Run is End.\n"));

	ACE_Time_Value tvSleep(2, 0);
	ACE_OS::sleep(tvSleep);

	OUR_DEBUG((LM_INFO, "[main]Server Exit.\n"));

	return 0;
}