public function listen() { set_time_limit(false); $dbTask = Model::Latertask(); $dbInstance = Model::Laterinstance(); $tasks = $dbTask->where(['when', '<', time()])->cursor(); if ($tasks->count() > 0) { foreach ($tasks as $task) { $check = $dbInstance->where(['task_id', '=', (int) $task['id']])->cursor()->count(); $callback_id = isAke($task, 'callback_id', null); if ($check == 0) { $instance = $dbInstance->create(['task_id' => (int) $task['id'], 'start' => time()])->save(); $res = lib('closure')->fireStore((int) $task['closure_id'], (array) $task['args']); if ($callback_id) { $cb = $dbTask->find((int) $callback_id); $t = $cb->toArray(); $args = array_merge([$res], $t['args']); $res = lib('closure')->fireStore((int) $t['closure_id'], (array) $args); $cb->delete(); } $dt = $dbTask->find((int) $task['id']); if ($dt) { $dt->delete(); } $instance->delete(); Model::Laterhistory()->create(['task' => (array) $task, 'execution_time' => time()])->save(); } } } return true; }