Esempio n. 1
0
void SkinDownload::DownloadSkin(std::wstring url)
{
  m_url = url;
  int pos = m_url.find_last_of(L"//");
  m_filename = m_url.substr(pos + 1);
  
  _Start();
}
Esempio n. 2
0
bool SFB::Audio::Output::Start()
{
	LOGGER_DEBUG("org.sbooth.AudioEngine.Output", "Starting output");

	if(!_IsOpen())
		return false;

	if(_IsRunning())
		return true;

	return _Start();
}
Esempio n. 3
0
////////////////////////////////////////////////////////////////////////
// 描    述:  启动应用程序
// 作    者:  邵凯田
// 创建时间:  2008-10-10 14:17
// 参数说明:  @argc/argv为main输入参数
//            @szDate/szTime为编译日期时间
//            @bBlock为是否阻塞运行,true为阻塞,false为不阻塞
// 返 回 值:  true/false
//////////////////////////////////////////////////////////////////////////
bool SApplication::Run(int argc, char* argv[],const char* szDate,const char* szTime,bool bBlock/*=true*/)
{
	m_iArgc = argc;
	m_ppArgv = (char**)argv;
	m_sModule = argv[0];
	#ifndef _WITHOUT_AGENT_CHANNEL_
	m_sAgentIp = "127.0.0.1";
	#endif
	SString err;
	SString crc = SApi::GenerateCRCByFile(m_sModule,err);
	m_sModuleCrc = crc;
	m_sModuleTime.sprintf("%s %s",szDate,szTime);
	
	if(m_sModule.findRev('/') >= 0)
		m_sModule = m_sModule.mid(m_sModule.findRev('/')+1);
	if(m_sModule.findRev('\\') >= 0)
		m_sModule = m_sModule.mid(m_sModule.findRev('\\')+1);

	printf("#########################################################\n");
	printf("## SKTBASE Application frame\n");
	printf("## Module  Name: %s \n",m_sModule.data());
	printf("## Description : %s \n",m_sModuleDesc.data());
	printf("## Compile Time: %s %s\n",szDate,szTime);
	printf("## Appbase Ver : V%s \n",m_sAppbaseVer.data());
	printf("## Module  Ver : V%s \n",m_sModuleVer.data());
	printf("## CRC    Code : %s \n",crc.data());
	printf("#########################################################\n");

	SString sTemp="";
	if(IsParam("version",sTemp))
	{
		bool bWrite = false;
		SString sLine;
		SFile file;
		if(sTemp.length() > 0)
		{
			file.setFileName(sTemp);
			if(file.open(IO_Truncate))
				bWrite = true;
		}
		if(bWrite)
		{
			sLine.sprintf("#########################################################\n");
			file.writeString(sLine);
			sLine.sprintf("## SKTBASE Application frame\n");
			file.writeString(sLine);
			sLine.sprintf("## Module  Name: %s \n",m_sModule.data());
			file.writeString(sLine);
			sLine.sprintf("## Description : %s \n",m_sModuleDesc.data());
			file.writeString(sLine);
			sLine.sprintf("## Compile Time: %s %s\n",szDate,szTime);
			file.writeString(sLine);
			sLine.sprintf("## Appbase Ver : V%s \n",m_sAppbaseVer.data());
			file.writeString(sLine);
			sLine.sprintf("## Module  Ver : V%s \n",m_sModuleVer.data());
			file.writeString(sLine);
			sLine.sprintf("## CRC    Code : %s \n",crc.data());
			file.writeString(sLine);
			sLine.sprintf("#########################################################\n");
			file.writeString(sLine);
			file.close();
		}
		exit(0);
		abort();
	}


	if(m_sModuleDesc.length() == 0)
	{
		printf("ERROR!!! 缺少模块描述信息!请调用基类CSRecApplication::SetModuleDesc方法!\n\n\n");
	}
	if(m_sModuleVer.length() == 0)
	{
		printf("ERROR!!! 缺少模块版本信息!请调用基类CSRecApplication::SetVersion方法!\n\n\n");
	}
#ifndef WIN32
	signal(SIGPIPE,SIG_IGN);//忽略管道断开信号
	signal(SIGCHLD,SIG_IGN);
	signal(SIGCLD, SIG_IGN);
#endif

#ifndef WIN32
	if(m_bFork)
	{
		//LINUX下将进程设置为守护进程
		//printf("@@@@@@@@@@@@begin fork()\n");
		if(fork())
		{
			//printf("@@@@@@@@@@@@fork()\n");
			exit(0);
		}
	}
	SApi::UsSleep(100000);
	signal(SIGCHLD,SIG_IGN);
#endif

	SLog::setLogLevel(SLog::LOG_DEBUG);
	SLog::setModuleName(m_sModule.data());

	//预处理命令
	SXmlConfig xml;
	SString sFileName;
	m_sExePath = SDir::currentDirPath();
	if(m_sExePath.right(1) != "/" && m_sExePath.right(1) != "\\")
		m_sExePath += "/";
	sFileName=m_sExePath + "logconfig.xml";
	if(!xml.ReadConfig(sFileName))
	{
		LOGWARN("打开<logconfig.xml>文件失败!将无法使用日志记录功能! file=%s",sFileName.data());
	}
	else
	{
		sFileName = m_sModule;
		SBaseConfig *pPrecommand = xml.SearchChild("log<module='"+sFileName+"'>");
		if(pPrecommand == NULL)
		{
			if(sFileName.right(4).toLower() == ".exe")
				sFileName = sFileName.left(sFileName.length()-4);
			pPrecommand = xml.SearchChild("log<module='"+sFileName+"'>");
		}

		if(pPrecommand == NULL)
		{
			//没有专用的,找缺省的
			pPrecommand = xml.SearchChild("log<module=''>");
		}
		if(pPrecommand != NULL)
		{
			//预处理命令
			int i,cnt = pPrecommand==NULL?0:pPrecommand->GetChildCount("command");
			for(i=0;i<cnt;i++)
			{
				SBaseConfig *pCommand = pPrecommand->GetChildNode(i,"command");
				if(pCommand == NULL )
					continue;
				SString cmd = pCommand->GetNodeValue();
				if(cmd.find("[@modulename]") >= 0)
				{
					SString sModule = SLog::getModuleName();
					cmd = cmd.replace("[@modulename]",sModule);
				}
				ParseCommandLine(cmd);
			}
		}
	}

	//是否处于调试模式
	if(IsParam("debug"))
		m_bDebugMode = true;

	if(IsParam("console",sTemp))
	{
		sTemp = sTemp.toLower();
		if(sTemp == "off")
		{
			//强制关闭控制台的日志输出
			m_bLogToConsole = false;
			ParseCommandLine("log to console off");
		}
	}
#ifndef _WITHOUT_AGENT_CHANNEL_
	if(IsParam("agentport",sTemp))
	{
		m_iAgentPort = sTemp.toInt();
		if(m_iAgentPort == 0)
			m_iAgentPort = 6666;
	}
#endif
	if(IsParam("stop"))
	{
		if(!_Stop())
		{
			LOGFAULT("停止应用失败!");
			//SLog::WaitForLogEmpty();
			return false;
		}
		return true;
	}
	else if(IsParam("restart"))
	{
		_Stop();
		if(!_Start())
		{
			LOGFAULT("启动应用失败!");
			//SLog::WaitForLogEmpty();
			return false;
		}
	}
	else
	{
		if(!_Start())
		{
			LOGFAULT("启动应用失败!");
			//SLog::WaitForLogEmpty();
			return false;
		}
	}
	LOGDEBUG("应用服务启动完成!");

	if(bBlock)
	{
		//阻塞方式运行
#ifndef _WITHOUT_AGENT_CHANNEL_
		StartAgent(bBlock);
#else
		while(!m_bHalt)
		{
			//等待有人发出退出信号
			if(IsClosedExist())
			{
				LOGWARN("收到退出信号! 准备关闭当前进程!");
				Stop();
				//准备关闭当前进程
				this->RemoveClose();
				break;
			}
			SApi::UsSleep(2000000);
		}
#endif
	}
	else
	{
		//非阻塞方式运行
#ifndef _WITHOUT_AGENT_CHANNEL_
		StartAgent(bBlock);
#endif
	}

	LOGDEBUG("应用服务已退出!");
	//SLog::WaitForLogEmpty();
	return true;
}