Пример #1
0
ObjKsTheme::ObjKsTheme( const QString& theme )
  :mActiveTheme (theme), mThemeDir("/"), mThemeConfig (0L), mThemePrefix( "Themes/" ), d(0)
{
  // Get Xinerama config.
  KConfig *config = kapp->config();
  config->setGroup( "Xinerama" );
  QDesktopWidget *desktop = kapp->desktop();
  mXineramaScreen = config->readNumEntry("KSplashScreen", desktop->primaryScreen());

  // For Xinerama, let's put the mouse on the first head.  Otherwise it could appear anywhere!
  if (desktop->isVirtualDesktop() && mXineramaScreen != -2)
  {
    QRect rect = desktop->screenGeometry( mXineramaScreen );
    if (!rect.contains(QCursor::pos()))
      QCursor::setPos(rect.center());
  }

  // Does the active theme exist?
  if( !loadThemeRc( mActiveTheme, false ) )
    if( !loadLocalConfig( mActiveTheme, false ) )
      if( !loadThemeRc( "Default", false ) )
        loadLocalConfig( "Default", true ); //force: we need some defaults
  loadCmdLineArgs(KCmdLineArgs::parsedArgs());
  mThemePrefix += ( mActiveTheme + "/" );
}
Пример #2
0
int KSGateway::run()
{
	int ret = loadLocalConfig();
	if(ret)
		return ret;
	ret = setupLogSystem();
	if(ret)
		return ret;
	ACE_DEBUG((LM_INFO,"开始启动前置机..."));
	ACE_DEBUG((LM_INFO,"应用服务器[%s:%d]func[%d]",_configuration._drtpSvrIP.c_str()
		,_configuration._drtpSvrPort,_configuration._drtpMainFunc));

	ret = setupDrtpPool();
	if(ret)
	{
		ACE_DEBUG((LM_ERROR,"初始化DRTP连接失败,返回码[%d]",ret));
		return ret;
	}
	
	ret = enroll();
	if(ret)
	{
		ACE_DEBUG((LM_ERROR,"前置机签到失败,错误码[%d]",ret));
		return ret;
	}
	ret = downloadRuntimeParams();
	if(ret)
	{
		ACE_DEBUG((LM_ERROR,"下载运行参数失败,错误码[%d]",ret));
		return ret;
	}
	
	// 加载 loop 设备
	ret = loadLoopDevice();
	if(ret)
	{
		return ret;
	}
	if("" != _configuration._devType)
	{
		// 只有当有设备时,才需要调用设置初始化
		ret = loadDeviceType();
		if(ret)
		{
			return ret;
		}
		
		ret = setupAllDevices();
		if(ret)
		{
			return ret;
		}
	}
	else
	{
		ACE_DEBUG((LM_INFO,"前置机未加载设备!"));
	}
	loadTaskExecutor();

	ret = setup_all_proactor_acceptor();

	ret = startTimeScheduler();
	if(ret)
		return ret;
	
	ACE_DEBUG((LM_INFO,"启动前置机成功..."));
	// 进入主循环
	_status = stRunning;
	int i = 0;
	while(_status == stRunning)
	{
		KSGThreadUtil::Sleep(5000);
		KSGThreadUtil::yield();
	}
	ACE_DEBUG((LM_INFO,"正在停止前置机..."));
	stop_all_proactor_acceptor();
	SchedulerGroup::Instance().TerminateAll();
	_devgrpSchd.TerminateAll();
	ACE_DEBUG((LM_INFO,"主流程运行结束"));
	exit();
	return 0;
}
Пример #3
0
int KSGateway::run()
{
	long sleep_time = 0;
	int ret = loadLocalConfig();
	if(ret)
		return ret;
	ret = setupLogSystem();
	if(ret)
		return ret;
	ACE_DEBUG((LM_INFO,"开始启动前置机..."));
	ACE_DEBUG((LM_NOTICE,"前置机版本[%s]",KSG_FULL_VERSION));
	ACE_DEBUG((LM_NOTICE,"编译器 : %s",KSG_BUILD_INFO));
	ACE_DEBUG((LM_NOTICE,"libraries ACE : %s , boost : %s , libcurl : %s"
		,KSG_ACE_VERSION,KSG_BOOST_VERSION,KSG_CURL_VERSION));
	ACE_DEBUG((LM_NOTICE,KSG_COPYRIGHT_STRING));
	ACE_DEBUG((LM_INFO,"应用服务器[%s:%d]func[%d]",_configuration._drtpSvrIP.c_str()
		,_configuration._drtpSvrPort,_configuration._drtpMainFunc));

	ret = setupDrtpPool();
	if(ret)
	{
		ACE_DEBUG((LM_ERROR,"初始化DRTP连接失败,返回码[%d]",ret));
		return ret;
	}
	
	ret = enroll();
	if(ret)
	{
		ACE_DEBUG((LM_ERROR,"前置机签到失败,错误码[%d]",ret));
		return ret;
	}
	ret = downloadRuntimeParams(&_configuration);
	if(ret)
	{
		ACE_DEBUG((LM_ERROR,"下载运行参数失败,错误码[%d]",ret));
		return ret;
	}
	
	ret = load_vendor_config();
	if(ret)
	{
		return ret;
	}
	// 加载 loop 设备
	/*
	ret = loadLoopDevice();
	if(ret)
	{
		return ret;
	}
	*/

	ret = setupAllDevices();
	if(ret)
	{
		return ret;
	}
	//ACE_DEBUG((LM_INFO,"前置机未加载设备!"));
	loadTaskExecutor();

	_status = stRunning;

	ret = setup_all_acceptor();

	// 2007-04-19
	// 为防止调度线程在接收任务线程之后启动,当任务队列中只有一条任务的
	// 情况下,可能造成的饥饿死锁,应先启动调度线程。但是这种处理办法并
	// 不是最好的,应该增加信号量来控制任务采集线程晚于调度线程启动.
	ret = start_scheduler_algorithm();
	if(ret)
		return ret;

	ret = startTimeScheduler();
	if(ret)
		return ret;
	
	if(_configuration._start_bcc)
	{
		if(start_bcc_svr())
			return -1;
	}

	if (_configuration._loadCardState)
	{
		if(loadCardState())
			return -1;
	}
	
	ACE_DEBUG((LM_INFO,"启动前置机成功..."));
	// 进入主循环
	update_max_blk_version();
	int i = 0;
	while(_status == stRunning)
	{
		sleep_and_test(5000);
		report_status();
		update_max_blk_version();
		/*
		sleep_time += 5000;
		if(sleep_time > 1000 * 60 * 15)
		{
			
			KSGConfig config;
			config = _configuration;
			if(downloadRuntimeParams(&config) == 0)
			{
				ACE_DEBUG((LM_DEBUG,"更新前置机参数,gwid[%d]",config._gwId));
				ACE_GUARD(ACE_Thread_Mutex,mon,_global_mutex);
				_configuration = config;
			}
			sleep_time = 0;
		}
		*/
		KSGThreadUtil::yield();
	}
	ACE_DEBUG((LM_INFO,"正在停止前置机..."));
	if(_configuration._start_bcc)
		stop_bcc_svr();
	stop_all_acceptor();
	SchedulerGroup::Instance().TerminateAll();
	SchedulerGroup::Instance().ClearAll();
	// 使用循环等待方式,控制超时
	/*
	while(_status == stRunning)
	{
		ACE_Time_Value tv(5);
		tv += ACE_OS::gettimeofday();
		ACE_DEBUG((LM_DEBUG,"等待超时,准备重试"));
	}
	*/
	_status = stStop;
	//_devgrpSchd.TerminateAll();
	stop_scheduler_algorithm();
	ACE_DEBUG((LM_INFO,"主流程运行结束"));
	exit();
	return 0;
}
Пример #4
0
int KSGateway::run()
{
	long sleep_time = 0;
	int ret = loadLocalConfig();
	if(ret)
		return ret;
	ret = setupLogSystem();
	if(ret)
		return ret;
	ACE_DEBUG((LM_INFO,"开始启动前置机..."));
	ACE_DEBUG((LM_INFO,"应用服务器[%s:%d]func[%d]",_configuration._drtpSvrIP.c_str()
		,_configuration._drtpSvrPort,_configuration._drtpMainFunc));

	ret = setupDrtpPool();
	if(ret)
	{
		ACE_DEBUG((LM_ERROR,"初始化DRTP连接失败,返回码[%d]",ret));
		return ret;
	}
	
	ret = enroll();
	if(ret)
	{
		ACE_DEBUG((LM_ERROR,"前置机签到失败,错误码[%d]",ret));
		return ret;
	}
	ret = downloadRuntimeParams(&_configuration);
	if(ret)
	{
		ACE_DEBUG((LM_ERROR,"下载运行参数失败,错误码[%d]",ret));
		return ret;
	}
	
	ret = load_vendor_config();
	if(ret)
	{
		return ret;
	}
	// 加载 loop 设备
	/*
	ret = loadLoopDevice();
	if(ret)
	{
		return ret;
	}
	*/

	ret = setupAllDevices();
	if(ret)
	{
		return ret;
	}
	//ACE_DEBUG((LM_INFO,"前置机未加载设备!"));
	loadTaskExecutor();

	_status = stRunning;

	ret = setup_all_proactor_acceptor();

	// 2007-04-19
	// 为防止调度线程在接收任务线程之后启动,当任务队列中只有一条任务的
	// 情况下,可能造成的饥饿死锁,应先启动调度线程。但是这种处理办法并
	// 不是最好的,应该增加信号量来控制任务采集线程晚于调度线程启动.
	ret = start_scheduler_algorithm();
	if(ret)
		return ret;

	ret = startTimeScheduler();
	if(ret)
		return ret;
	
	
	ACE_DEBUG((LM_INFO,"启动前置机成功..."));
	// 进入主循环
	
	int i = 0;
	while(_status == stRunning)
	{
		KSGThreadUtil::Sleep(5000);
		sleep_time += 5000;
		if(sleep_time > 1000 * 60 * 15)
		{
			report_status();
			KSGConfig config;
			config = _configuration;
			if(downloadRuntimeParams(&config) == 0)
			{
				ACE_DEBUG((LM_DEBUG,"更新前置机参数,gwid[%d]",config._gwId));
				_configuration = config;
			}
			sleep_time = 0;
		}
		KSGThreadUtil::yield();
	}
	ACE_DEBUG((LM_INFO,"正在停止前置机..."));
	stop_all_proactor_acceptor();
	SchedulerGroup::Instance().TerminateAll();
	// 使用循环等待方式,控制超时
	/*
	while(_status == stRunning)
	{
		ACE_Time_Value tv(5);
		tv += ACE_OS::gettimeofday();
		ACE_DEBUG((LM_DEBUG,"等待超时,准备重试"));
	}
	*/
	_status = stStop;
	//_devgrpSchd.TerminateAll();
	stop_scheduler_algorithm();
	ACE_DEBUG((LM_INFO,"主流程运行结束"));
	exit();
	return 0;
}