. */ namespace SP\Core; use SP\Core\Messages\TaskMessage; /** * Class TaskFactory * * @package SP\Core */ class TaskFactory { /** * @var Task[] */ private static $tasks = []; /** * Crear una tarea para la actualización de estado de la actualización * * @param string $name * @param string $id * @return Task */ public static function create($name, $id) { return self::add((new Task($name, $id))->register()); } /** * @param Task $task * @return Task */ private static function add(Task $task) { if (isset(self::$tasks[$task->getTaskId()])) { throw new \RuntimeException('Task already registered'); } self::$tasks[$task->getTaskId()] = $task; return $task; } /** * Finalizar la tarea * * @param $id */ public static function end($id) { self::get($id)->end(false); self::delete($id); } /** * @param $id * @return Task */ private static function get($id) { if (isset(self::$tasks[$id])) { return self::$tasks[$id]; } else { throw new \RuntimeException('Task not registered'); } } /** * @param $id */ private static function delete($id) { if (!isset(self::$tasks[$id])) { throw new \RuntimeException('Task not registered'); } unset(self::$tasks[$id]); } /** * @param string $taskId * @param string $task * @return TaskMessage */ public static function createMessage($taskId, $task) { return new TaskMessage($taskId, $task); } /** * Enviar un mensaje de actualización a la tarea * * @param string $id * @param TaskMessage $taskMessage */ public static function update($id, TaskMessage $taskMessage) { self::get($id)->writeJsonStatusAndFlush($taskMessage); } }