getHandler() !== null){ throw new \InvalidArgumentException("Cannot assign multiple handlers to the same task"); } $this->task = $task; $this->taskId = $taskId; $this->delay = $delay; $this->period = $period; $this->taskName = $task->getName(); $this->ownerName = $ownerName ?? "Unknown"; $this->timings = Timings::getScheduledTaskTimings($this, $period); $this->task->setHandler($this); } public function isCancelled() : bool{ return $this->cancelled; } public function getNextRun() : int{ return $this->nextRun; } /** * @return void */ public function setNextRun(int $ticks){ $this->nextRun = $ticks; } public function getTaskId() : int{ return $this->taskId; } public function getTask() : Task{ return $this->task; } public function getDelay() : int{ return $this->delay; } public function isDelayed() : bool{ return $this->delay > 0; } public function isRepeating() : bool{ return $this->period > 0; } public function getPeriod() : int{ return $this->period; } /** * @return void */ public function cancel(){ try{ if(!$this->isCancelled()){ $this->task->onCancel(); } }finally{ $this->remove(); } } /** * @return void */ public function remove(){ $this->cancelled = true; $this->task->setHandler(null); } /** * @return void */ public function run(int $currentTick){ $this->timings->startTiming(); try{ $this->task->onRun($currentTick); }finally{ $this->timings->stopTiming(); } } public function getTaskName() : string{ return $this->taskName; } public function getOwnerName() : string{ return $this->ownerName; } }