X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=framework%2Fmain%2Fclasses%2Fhandler%2Ftasks%2Fclass_TaskHandler.php;h=f2a63cfe955735bc6f6d46bcc6d9e877ee3dedb6;hb=2218902056efcf9a2c66fe7c24995e066bd7cd11;hp=e488539f0e216da86f349afee7b8c52eebcf382e;hpb=adcdfc000eba8fac128786adcb8cb480085e7e76;p=core.git diff --git a/framework/main/classes/handler/tasks/class_TaskHandler.php b/framework/main/classes/handler/tasks/class_TaskHandler.php index e488539f..f2a63cfe 100644 --- a/framework/main/classes/handler/tasks/class_TaskHandler.php +++ b/framework/main/classes/handler/tasks/class_TaskHandler.php @@ -3,11 +3,14 @@ namespace Org\Mxchange\CoreFramework\Handler\Task; // Import framework stuff -use Org\Mxchange\CoreFramework\Factory\ObjectFactory; +use Org\Mxchange\CoreFramework\Bootstrap\FrameworkBootstrap; +use Org\Mxchange\CoreFramework\Factory\Object\ObjectFactory; use Org\Mxchange\CoreFramework\Handler\BaseHandler; -use Org\Mxchange\CoreFramework\Lists\Listable; use Org\Mxchange\CoreFramework\Registry\Registerable; use Org\Mxchange\CoreFramework\Task\Taskable; +use Org\Mxchange\CoreFramework\Traits\Iterator\IteratorTrait; +use Org\Mxchange\CoreFramework\Traits\Lists\ListableTrait; +use Org\Mxchange\CoreFramework\Traits\Visitor\VisitorTrait; use Org\Mxchange\CoreFramework\Visitor\Visitable; /** @@ -33,6 +36,11 @@ use Org\Mxchange\CoreFramework\Visitor\Visitable; * along with this program. If not, see . */ class TaskHandler extends BaseHandler implements Registerable, HandleableTask { + // Load traits + use IteratorTrait; + use ListableTrait; + use VisitorTrait; + // Exception constants const EXCEPTION_TASK_IS_INVALID = 0xb00; @@ -59,7 +67,7 @@ class TaskHandler extends BaseHandler implements Registerable, HandleableTask { $handlerInstance = new TaskHandler(); // Output debug message - self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('TASK-HANDLER[' . __METHOD__ . ':' . __LINE__ . ']: Initializing task handler.'); + self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('TASK-HANDLER: Initializing task handler.'); // Init the task list $handlerInstance->setListInstance(ObjectFactory::createObjectByConfiguredName('task_list_class')); @@ -75,7 +83,7 @@ class TaskHandler extends BaseHandler implements Registerable, HandleableTask { $handlerInstance->registerTask('idle_loop', $taskInstance); // Output debug message - self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('TASK-HANDLER[' . __METHOD__ . ':' . __LINE__ . ']: Task handler initialized.'); + self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('TASK-HANDLER: Task handler initialized.'); // Return the prepared instance return $handlerInstance; @@ -97,7 +105,7 @@ class TaskHandler extends BaseHandler implements Registerable, HandleableTask { if (!$this->getListInstance()->getIterator()->valid()) { // Not valid! throw new InvalidTaskException($this, self::EXCEPTION_TASK_IS_INVALID); - } // END - if + } // Get current task $currentTask = $this->getListInstance()->getIterator()->current(); @@ -110,23 +118,23 @@ class TaskHandler extends BaseHandler implements Registerable, HandleableTask { // Should we start now? if ($diff < $currentTask['task_startup_delay']) { // Skip this silently - //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('TASK-HANDLER[' . __METHOD__ . ':' . __LINE__ . ']: Task ' . $currentTask['id'] . ' not started: diff=' . $diff . ',task_startup_delay=' . $currentTask['task_startup_delay']); + //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('TASK-HANDLER: Task ' . $currentTask['id'] . ' not started: diff=' . $diff . ',task_startup_delay=' . $currentTask['task_startup_delay']); return; - } // END - if + } // Launch the task and mark it as updated $currentTask['task_started'] = true; $updateTask = true; // Debug message - self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('TASK-HANDLER[' . __METHOD__ . ':' . __LINE__ . ']: Task ' . $currentTask['id'] . ' started with startup_delay=' . $currentTask['task_startup_delay'] . 'ms'); - } // END - if + self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('TASK-HANDLER: Task ' . $currentTask['id'] . ' started with startup_delay=' . $currentTask['task_startup_delay'] . 'ms'); + } // Get time difference from interval delay $diff = ($this->getMilliTime() - $currentTask['task_last_activity']) * 1000; // Debug message - //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('TASK-HANDLER[' . __METHOD__ . ':' . __LINE__ . ']: Task ' . $currentTask['id'] . ' diff=' . $diff . ',task_interval_delay=' . $currentTask['task_interval_delay'] . ',task_max_runs=' . $currentTask['task_max_runs'] . ',task_total_runs=' . $currentTask['task_total_runs']); + //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('TASK-HANDLER: Task ' . $currentTask['id'] . ' diff=' . $diff . ',task_interval_delay=' . $currentTask['task_interval_delay'] . ',task_max_runs=' . $currentTask['task_max_runs'] . ',task_total_runs=' . $currentTask['task_total_runs']); // Is the interval delay reached? if ((($diff < $currentTask['task_interval_delay']) && ($currentTask['task_max_runs'] == 0)) || (($currentTask['task_max_runs'] > 0) && ($currentTask['task_total_runs'] == $currentTask['task_max_runs']))) { @@ -134,11 +142,11 @@ class TaskHandler extends BaseHandler implements Registerable, HandleableTask { if ($updateTask === true) { // Update the task before leaving $this->updateTask($currentTask); - } // END - if + } // Skip this silently return; - } // END - if + } // Set last activity $currentTask['task_last_activity'] = $this->getMilliTime(); @@ -179,13 +187,13 @@ class TaskHandler extends BaseHandler implements Registerable, HandleableTask { */ private function unregisterTask (array $taskData) { // Debug output - //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('TASK-HANDLER[' . __METHOD__ . ':' . __LINE__ . ']: Removing task ' . $taskData['id'] . ' from queue - CALLED!'); + //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('TASK-HANDLER: Removing task ' . $taskData['id'] . ' from queue - CALLED!'); // Remove the entry $this->getListInstance()->removeEntry('tasks', $taskData); // Debug output - //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('TASK-HANDLER[' . __METHOD__ . ':' . __LINE__ . ']: Removing task ' . $taskData['id'] . ' from queue - EXIT!'); + //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('TASK-HANDLER: Removing task ' . $taskData['id'] . ' from queue - EXIT!'); } /** @@ -210,8 +218,8 @@ class TaskHandler extends BaseHandler implements Registerable, HandleableTask { // Abort here break; - } // END - if - } // END - foreach + } + } // Return found name return $taskName; @@ -221,13 +229,13 @@ class TaskHandler extends BaseHandler implements Registerable, HandleableTask { * Registers a task with a task handler. * * @param $taskName A task name to register the task on - * @param $taskInstance The instance that should be registered as a task + * @param $taskInstance An instance of a Taskable class * @return void */ - public function registerTask ($taskName, Visitable $taskInstance) { + public function registerTask (string $taskName, Taskable $taskInstance) { // Get interval delay - $intervalDelay = $this->getConfigInstance()->getConfigEntry('task_' . $taskName . '_interval_delay'); - $startupDelay = $this->getConfigInstance()->getConfigEntry('task_' . $taskName . '_startup_delay'); + $intervalDelay = FrameworkBootstrap::getConfigurationInstance()->getConfigEntry('task_' . $taskName . '_interval_delay'); + $startupDelay = FrameworkBootstrap::getConfigurationInstance()->getConfigEntry('task_' . $taskName . '_startup_delay'); // If the task is 'idle_loop', a deplay of zero seconds is fine assert($intervalDelay >= 0); @@ -235,7 +243,7 @@ class TaskHandler extends BaseHandler implements Registerable, HandleableTask { assert(($taskName === 'idle_loop') || (($taskName != 'idle_loop') && ($startupDelay > 0))); // Create the entry - $taskEntry = array( + $taskEntry = [ // Identifier for the generateHash() method 'id' => $taskName, // Whether the task is started @@ -257,14 +265,14 @@ class TaskHandler extends BaseHandler implements Registerable, HandleableTask { // Interval time (delay) in milliseconds before this task is executed again 'task_interval_delay' => $intervalDelay, // How often should this task run? - 'task_max_runs' => $this->getConfigInstance()->getConfigEntry('task_' . $taskName . '_max_runs'), - ); + 'task_max_runs' => FrameworkBootstrap::getConfigurationInstance()->getConfigEntry('task_' . $taskName . '_max_runs'), + ]; // Add the entry $this->getListInstance()->addEntry('tasks', $taskEntry); // Debug message - self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('TASK-HANDLER[' . __METHOD__ . ':' . __LINE__ . ']: Task registered: taskName=' . $taskName . + self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('TASK-HANDLER: Task registered: taskName=' . $taskName . ' (taskInstance=' . $taskInstance->__toString() . ')' . ', startupDelay=' . $taskEntry['task_startup_delay'] . 'ms' . ', intervalDelay=' . $taskEntry['task_interval_delay'] . 'ms' . @@ -279,7 +287,7 @@ class TaskHandler extends BaseHandler implements Registerable, HandleableTask { */ public function hasTasksLeft () { // Do we have tasks there? - $tasksLeft = (($this->getListInstance() instanceof Listable) && ($this->getListInstance()->count() > 0)); + $tasksLeft = ($this->getListInstance()->count() > 0); // Return result return $tasksLeft; @@ -298,7 +306,7 @@ class TaskHandler extends BaseHandler implements Registerable, HandleableTask { if (!$this->getListInstance()->getIterator()->valid()) { // Rewind to the beginning for next loop $this->getListInstance()->getIterator()->rewind(); - } // END - if + } // Try to execute the task $this->executeCurrentTask(); @@ -318,10 +326,10 @@ class TaskHandler extends BaseHandler implements Registerable, HandleableTask { $this->getListInstance()->getIterator()->rewind(); // Debug message - self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('TASK-HANDLER[' . __METHOD__ . ':' . __LINE__ . ']: Shutting down all ' . $this->getListInstance()->count() . ' tasks...'); + self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('TASK-HANDLER: Shutting down all ' . $this->getListInstance()->count() . ' tasks...'); // Remember all tasks that has been shutdown for removal - $tasks = array(); + $tasks = []; // Instance a visitor $this->setVisitorInstance(ObjectFactory::createObjectByConfiguredName('shutdown_task_visitor_class')); @@ -332,7 +340,7 @@ class TaskHandler extends BaseHandler implements Registerable, HandleableTask { $currentTask = $this->getListInstance()->getIterator()->current(); // Output debug message - self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('TASK-HANDLER[' . __METHOD__ . ':' . __LINE__ . ']: Shutting down task ' . $currentTask['id'] . ' (taskInstance=' . $currentTask['task_instance']->__toString() . ') ...'); + self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('TASK-HANDLER: Shutting down task ' . $currentTask['id'] . ' (taskInstance=' . $currentTask['task_instance']->__toString() . ') ...'); // Shutdown the task $currentTask['task_instance']->accept($this->getVisitorInstance()); @@ -342,15 +350,15 @@ class TaskHandler extends BaseHandler implements Registerable, HandleableTask { // Advance to next one $this->getListInstance()->getIterator()->next(); - } // END - while + } // Debug message - self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('TASK-HANDLER[' . __METHOD__ . ':' . __LINE__ . ']: Shutdown of all tasks completed.'); + self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('TASK-HANDLER: Shutdown of all tasks completed.'); // Remove all tasks foreach ($tasks as $entry) { $this->unregisterTask($entry); - } // END - foreach + } } }