Example #1
0
 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;
 }