add Automatic Launcher plugin
This commit is contained in:
		
							
								
								
									
										175
									
								
								MatchManagerSuite/MatchManagerAutomaticLauncher.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										175
									
								
								MatchManagerSuite/MatchManagerAutomaticLauncher.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,175 @@ | ||||
| <?php | ||||
|  | ||||
| namespace MatchManagerSuite; | ||||
|  | ||||
| use ManiaControl\Callbacks\CallbackListener; | ||||
| use ManiaControl\Logger; | ||||
| use ManiaControl\ManiaControl; | ||||
| use ManiaControl\Plugins\Plugin; | ||||
| use ManiaControl\Plugins\PluginManager; | ||||
| use ManiaControl\Settings\Setting; | ||||
| use ManiaControl\Settings\SettingManager; | ||||
| use ManiaControl\Callbacks\TimerListener; | ||||
|  | ||||
| if (!class_exists('MatchManagerSuite\MatchManagerCore')) { | ||||
| 	$this->maniaControl->getChat()->sendErrorToAdmins('MatchManager Core is required to use one of MatchManager plugin. Install it and restart Maniacontrol'); | ||||
| 	Logger::logError('MatchManager Core is required to use one of MatchManager plugin. Install it and restart Maniacontrol'); | ||||
| 	return false; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * MatchManager Automatic Launche | ||||
|  * | ||||
|  * @author		Beu | ||||
|  * @license		http://www.gnu.org/licenses/ GNU General Public License, Version 3 | ||||
|  */ | ||||
| class MatchManagerAutomaticLauncher implements CallbackListener, TimerListener, Plugin { | ||||
| 	/* | ||||
| 	 * Constants | ||||
| 	 */ | ||||
| 	const PLUGIN_ID											= 172; | ||||
| 	const PLUGIN_VERSION									= 1.0; | ||||
| 	const PLUGIN_NAME										= 'MatchManager Automatic Launcher'; | ||||
| 	const PLUGIN_AUTHOR										= 'Beu'; | ||||
|  | ||||
| 	// MatchManagerWidget Properties | ||||
| 	const MATCHMANAGERCORE_PLUGIN							= 'MatchManagerSuite\MatchManagerCore'; | ||||
|  | ||||
| 	const SETTING_TIMESTAMPS_START_MATCHES					= 'Timestamps of the start of the matches:'; | ||||
|  | ||||
| 	/* | ||||
| 	 * Private properties | ||||
| 	 */ | ||||
| 	/** @var ManiaControl $maniaControl */ | ||||
| 	private $maniaControl 			= null; | ||||
| 	private $MatchManagerCore		= null; | ||||
|  | ||||
|  | ||||
| 	/** | ||||
| 	 * @param \ManiaControl\ManiaControl $maniaControl | ||||
| 	 * @see \ManiaControl\Plugins\Plugin::prepare() | ||||
| 	 */ | ||||
| 	public static function prepare(ManiaControl $maniaControl) { | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * @see \ManiaControl\Plugins\Plugin::getId() | ||||
| 	 */ | ||||
| 	public static function getId() { | ||||
| 		return self::PLUGIN_ID; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * @see \ManiaControl\Plugins\Plugin::getName() | ||||
| 	 */ | ||||
| 	public static function getName() { | ||||
| 		return self::PLUGIN_NAME; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * @see \ManiaControl\Plugins\Plugin::getVersion() | ||||
| 	 */ | ||||
| 	public static function getVersion() { | ||||
| 		return self::PLUGIN_VERSION; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * @see \ManiaControl\Plugins\Plugin::getAuthor() | ||||
| 	 */ | ||||
| 	public static function getAuthor() { | ||||
| 		return self::PLUGIN_AUTHOR; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * @see \ManiaControl\Plugins\Plugin::getDescription() | ||||
| 	 */ | ||||
| 	public static function getDescription() { | ||||
| 		return 'Automatic launch matches with timestamps'; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * @param \ManiaControl\ManiaControl $maniaControl | ||||
| 	 * @return bool | ||||
| 	 * @see \ManiaControl\Plugins\Plugin::load() | ||||
| 	 */ | ||||
| 	public function load(ManiaControl $maniaControl) { | ||||
| 		// Init plugin | ||||
| 		$this->maniaControl = $maniaControl; | ||||
| 		if ($this->maniaControl->getPluginManager()->getSavedPluginStatus(self::MATCHMANAGERCORE_PLUGIN)) { | ||||
| 			// plugin are loaded in alphabetic order, just wait 1 sec before trying to load MatchManager Core | ||||
| 			$this->maniaControl->getTimerManager()->registerOneTimeListening($this, function () { | ||||
| 				$this->MatchManagerCore = $this->maniaControl->getPluginManager()->getPlugin(self::MATCHMANAGERCORE_PLUGIN); | ||||
| 				if ($this->MatchManagerCore == null) { | ||||
| 					$this->maniaControl->getChat()->sendErrorToAdmins('MatchManager Core is needed to use ' . self::PLUGIN_NAME . ' plugin.'); | ||||
| 					$this->maniaControl->getPluginManager()->deactivatePlugin((get_class())); | ||||
| 				} else { | ||||
| 					$this->createTimers(); | ||||
| 				} | ||||
| 			}, 1000); | ||||
| 		} else { | ||||
| 			throw new \Exception('MatchManager Core is needed to use ' . self::PLUGIN_NAME); | ||||
| 		} | ||||
|  | ||||
| 		$this->maniaControl->getCallbackManager()->registerCallbackListener(PluginManager::CB_PLUGIN_UNLOADED, $this, 'handlePluginUnloaded'); | ||||
| 		$this->maniaControl->getCallbackManager()->registerCallbackListener(SettingManager::CB_SETTING_CHANGED, $this, 'updateSettings'); | ||||
|  | ||||
| 		$this->maniaControl->getSettingManager()->initSetting($this, self::SETTING_TIMESTAMPS_START_MATCHES, "", "Comma separated of the start of the matches"); | ||||
|  | ||||
| 		return true; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * @see \ManiaControl\Plugins\Plugin::unload() | ||||
| 	 */ | ||||
| 	public function unload() { | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Update Widgets on Setting Changes | ||||
| 	 * | ||||
| 	 * @param Setting $setting | ||||
| 	 */ | ||||
| 	public function updateSettings(Setting $setting) { | ||||
| 		if ($setting->belongsToClass($this)) { | ||||
| 			$this->createTimers(); | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	 | ||||
| 	/** | ||||
| 	 * handlePluginUnloaded | ||||
| 	 * | ||||
| 	 * @param  string $pluginClass | ||||
| 	 * @param  Plugin $plugin | ||||
| 	 * @return void | ||||
| 	 */ | ||||
| 	public function handlePluginUnloaded(string $pluginClass, Plugin $plugin) { | ||||
| 		$this->maniaControl->getChat()->sendErrorToAdmins(self::PLUGIN_NAME . " disabled because MatchManager Core is now disabled"); | ||||
| 		if ($pluginClass == self::MATCHMANAGERCORE_PLUGIN) { | ||||
| 			$this->maniaControl->getPluginManager()->deactivatePlugin((get_class())); | ||||
| 		} | ||||
| 	} | ||||
| 	 | ||||
| 	/** | ||||
| 	 * createTimers | ||||
| 	 * | ||||
| 	 * @return void | ||||
| 	 */ | ||||
| 	private function createTimers() { | ||||
| 		$this->maniaControl->getTimerManager()->unregisterTimerListenings($this); | ||||
|  | ||||
| 		$timestamps = explode(",", $this->maniaControl->getSettingManager()->getSettingValue($this, self::SETTING_TIMESTAMPS_START_MATCHES)); | ||||
| 		$now = time(); | ||||
| 		$newtimers = 0; | ||||
| 		foreach ($timestamps as $timestamp) { | ||||
| 			if ($now < $timestamp) { | ||||
| 				$delta = ($timestamp - $now) * 1000; | ||||
| 				$this->maniaControl->getTimerManager()->registerOneTimeListening($this, function () { | ||||
| 					$this->MatchManagerCore->MatchStart(); | ||||
| 				}, $delta); | ||||
| 				$newtimers++; | ||||
| 			} | ||||
| 		} | ||||
| 		$this->maniaControl->getChat()->sendSuccessToAdmins($newtimers . " matches are planned"); | ||||
| 	} | ||||
| } | ||||
		Reference in New Issue
	
	Block a user