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(); }
bool SFB::Audio::Output::Start() { LOGGER_DEBUG("org.sbooth.AudioEngine.Output", "Starting output"); if(!_IsOpen()) return false; if(_IsRunning()) return true; return _Start(); }
//////////////////////////////////////////////////////////////////////// // 描 述: 启动应用程序 // 作 者: 邵凯田 // 创建时间: 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; }