#!/usr/bin/env php ')) { fwrite( STDERR, sprintf( 'FuzeWorks Async requires PHP 7.3 or higher.' . PHP_EOL . 'You are using PHP %s (%s).' . PHP_EOL, PHP_VERSION, PHP_BINARY ) ); die(1); } // First load composer $autoloaders = [ __DIR__ . '/../../autoload.php', __DIR__ . '/../vendor/autoload.php', __DIR__ . '/vendor/autoload.php' ]; foreach ($autoloaders as $file) if (file_exists($file)) require_once($file); // If a bootstrap is provided, use that one $arguments = getopt('', ['bootstrap:']); if (!isset($arguments['bootstrap']) || empty($arguments['bootstrap'])) { fwrite(STDERR, "Could not load supervisor. No bootstrap provided."); die(1); } // Load the file. If it doesn't exist, fail. $bootstrap = $arguments['bootstrap']; if (!file_exists($bootstrap)) { fwrite(STDERR, "Could not load supervisor. Provided bootstrap doesn't exist."); die(1); } // Load the bootstrap /** @var Factory $container */ $container = require($bootstrap); // Check if container is a Factory if (!$container instanceof Factory) { fwrite(STDERR, "Could not load supervisor. Provided bootstrap is not a valid bootstrap."); die(1); } // Check if the Async library is already loaded. If not, load it. // @todo: Better check in libraries for existing library try { /** @var Tasks $lib */ $lib = $container->libraries->get('async'); } catch (LibraryException $e) { $container->libraries->addLibraryClass('async', '\FuzeWorks\Async\Tasks'); /** @var Tasks $lib */ $lib = $container->libraries->get('async'); } // And finally, run the supervisor try { $supervisor = $lib->getSuperVisor($bootstrap); $res = SuperVisor::RUNNING; while ($res === SuperVisor::RUNNING) { $res = $supervisor->cycle(); usleep(250000); } // Write results if ($res === SuperVisor::CONSTRAINED) fwrite(STDOUT, "SuperVisor finished due to constrained tasks." . PHP_EOL); else fwrite(STDOUT, "SuperVisor finished due to finishing all tasks." . PHP_EOL); } catch (InvalidArgumentException | TasksException | LibraryException $e) { fwrite(STDERR, sprintf('FuzeWorks Async could not load.' . PHP_EOL . 'Exception: ' . $e->getMessage() . PHP_EOL) ); }