diff --git a/src/danog/MadelineProto/Shutdown.php b/src/danog/MadelineProto/Shutdown.php new file mode 100644 index 00000000..cd89722b --- /dev/null +++ b/src/danog/MadelineProto/Shutdown.php @@ -0,0 +1,90 @@ +. + * + * @author Daniil Gentili + * @copyright 2016-2019 Daniil Gentili + * @license https://opensource.org/licenses/AGPL-3.0 AGPLv3 + * + * @link https://docs.madelineproto.xyz MadelineProto documentation + */ + +namespace danog\MadelineProto; + +/* + * Controls script shutdown + */ +class Shutdown +{ + /** + * Callbacks to call on shutdown + * + * @var array + */ + private static $callbacks = []; + /** + * Whether the main shutdown was registered + * + * @var boolean + */ + private static $registered = false; + /** + * Incremental ID for new callback + * + * @var integer + */ + private static $id = 0; + /** + * Function to be called on shutdown + * + * @return void + */ + public static function shutdown() + { + foreach (self::$callbacks as $callback) { + $callback(); + } + } + /** + * Add a callback for script shutdown + * + * @param callable $callback The callback to set + * @param null|string $id The optional callback ID + * + * @return The callback ID + */ + public static function addCallback($callback, $id = null) + { + if (!$id) { + $id = self::$id++; + } + self::$callbacks[$id] = $callback; + if (!self::$registered) { + register_shutdown_function([__CLASS__, 'shutdown']); + self::$registered = true; + } + return $id; + } + /** + * Remove a callback from the script shutdown callable list + * + * @param null|string $id The optional callback ID + * + * @return bool true if the callback was removed correctly, false otherwise + */ + public static function removeCallback($id) + { + if (isset(self::$callbacks[$id])) { + unset(self::$callbacks[$id]); + return true; + } + return false; + } +} \ No newline at end of file