void print_warnings(const MythCommandLineParser &cmdline) { if (!cmdline.IsHouseKeeperEnabled()) { VERBOSE(VB_IMPORTANT, LOC_WARN + "****** The Housekeeper has been DISABLED with " "the --nohousekeeper option ******"); } if (!cmdline.IsSchedulerEnabled()) { VERBOSE(VB_IMPORTANT, LOC_WARN + "********** The Scheduler has been DISABLED with " "the --nosched option **********"); } if (!cmdline.IsAutoExpirerEnabled()) { VERBOSE(VB_IMPORTANT, LOC_WARN + "********* Auto-Expire has been DISABLED with " "the --noautoexpire option ********"); } if (!cmdline.IsJobQueueEnabled()) { VERBOSE(VB_IMPORTANT, LOC_WARN + "********* The JobQueue has been DISABLED with " "the --nojobqueue option *********"); } }
int run_backend(const MythCommandLineParser &cmdline) { if (!setup_context(cmdline)) return GENERIC_EXIT_NO_MYTHCONTEXT; bool ismaster = gCoreContext->IsMasterHost(); if (!UpgradeTVDatabaseSchema(ismaster, ismaster)) { VERBOSE(VB_IMPORTANT, "Couldn't upgrade database to new schema"); return GENERIC_EXIT_DB_OUTOFDATE; } /////////////////////////////////////////// g_pUPnp = new MediaServer(ismaster, !cmdline.IsUPnPEnabled() ); if (!ismaster) { int ret = connect_to_master(); if (ret != GENERIC_EXIT_OK) return ret; } QString myip = gCoreContext->GetSetting("BackendServerIP"); int port = gCoreContext->GetNumSetting("BackendServerPort", 6543); if (myip.isEmpty()) { cerr << "No setting found for this machine's BackendServerIP.\n" << "Please run setup on this machine and modify the first page\n" << "of the general settings.\n"; return GENERIC_EXIT_SETUP_ERROR; } MythSystemEventHandler *sysEventHandler = new MythSystemEventHandler(); if (ismaster) { VERBOSE(VB_GENERAL, LOC + "Starting up as the master server."); gCoreContext->LogEntry("mythbackend", LP_INFO, "MythBackend started as master server", ""); } else { VERBOSE(VB_GENERAL, LOC + "Running as a slave backend."); gCoreContext->LogEntry("mythbackend", LP_INFO, "MythBackend started as a slave backend", ""); } print_warnings(cmdline); bool fatal_error = false; bool runsched = setupTVs(ismaster, fatal_error); if (fatal_error) { delete sysEventHandler; return GENERIC_EXIT_SETUP_ERROR; } if (ismaster) { if (runsched) { sched = new Scheduler(true, &tvList); int err = sched->GetError(); if (err) return err; if (!cmdline.IsSchedulerEnabled()) sched->DisableScheduling(); } if (cmdline.IsHouseKeeperEnabled()) housekeeping = new HouseKeeper(true, ismaster, sched); if (cmdline.IsAutoExpirerEnabled()) { expirer = new AutoExpire(&tvList); if (sched) sched->SetExpirer(expirer); } } else if (cmdline.IsHouseKeeperEnabled()) { housekeeping = new HouseKeeper(true, ismaster, NULL); } if (cmdline.IsJobQueueEnabled()) jobqueue = new JobQueue(ismaster); // Setup status server HttpStatus *httpStatus = NULL; HttpServer *pHS = g_pUPnp->GetHttpServer(); if (pHS) { VERBOSE(VB_IMPORTANT, "Main::Registering HttpStatus Extension"); httpStatus = new HttpStatus(&tvList, sched, expirer, ismaster); if (httpStatus) pHS->RegisterExtension(httpStatus); } VERBOSE(VB_IMPORTANT, QString("Enabled verbose msgs: %1") .arg(verboseString)); MainServer *mainServer = new MainServer( ismaster, port, &tvList, sched, expirer); int exitCode = mainServer->GetExitCode(); if (exitCode != GENERIC_EXIT_OK) { VERBOSE(VB_IMPORTANT, "Backend exiting, MainServer initialization " "error."); delete mainServer; return exitCode; } if (httpStatus && mainServer) httpStatus->SetMainServer(mainServer); StorageGroup::CheckAllStorageGroupDirs(); if (gCoreContext->IsMasterBackend()) SendMythSystemEvent("MASTER_STARTED"); /////////////////////////////// /////////////////////////////// exitCode = qApp->exec(); /////////////////////////////// /////////////////////////////// if (gCoreContext->IsMasterBackend()) { SendMythSystemEvent("MASTER_SHUTDOWN"); qApp->processEvents(); } gCoreContext->LogEntry("mythbackend", LP_INFO, "MythBackend exiting", ""); delete sysEventHandler; delete mainServer; return exitCode; }