/** * Tries to execute a server tick */ private function tick() { $tickTime = microtime(true); if ($tickTime < $this->nextTick) { return false; } Timings::$serverTickTimer->startTiming(); ++$this->tickCounter; $this->checkConsole(); Timings::$connectionTimer->startTiming(); $this->network->processInterfaces(); Timings::$connectionTimer->stopTiming(); Timings::$schedulerTimer->startTiming(); $this->scheduler->mainThreadHeartbeat($this->tickCounter); Timings::$schedulerTimer->stopTiming(); $this->checkTickUpdates($this->tickCounter); if (($this->tickCounter & 0b1111) === 0) { $this->titleTick(); if ($this->queryHandler !== null and ($this->tickCounter & 0b111111111) === 0) { try { $this->queryHandler->regenerateInfo(); } catch (\Exception $e) { if ($this->logger instanceof MainLogger) { $this->logger->logException($e); } } } } Timings::$generationTimer->startTiming(); try { $this->generationManager->process(); } catch (\Exception $e) { if ($this->logger instanceof MainLogger) { $this->logger->logException($e); } } Timings::$generationTimer->stopTiming(); if ($this->tickCounter % 100 === 0) { foreach ($this->levels as $level) { $level->clearCache(); } } Timings::$serverTickTimer->stopTiming(); TimingsHandler::tick(); $now = microtime(true); array_shift($this->tickAverage); $this->tickAverage[] = min(20, 1 / max(0.001, $now - $tickTime)); array_shift($this->useAverage); $this->useAverage[] = min(1, ($now - $tickTime) / 0.05); if ($this->nextTick - $tickTime < -1) { $this->nextTick = $tickTime; } $this->nextTick += 0.05; return true; }
/** * Tries to execute a server tick */ private function tick() { $tickTime = microtime(true); if ($tickTime - $this->nextTick < -0.025) { //Allow half a tick of diff return false; } Timings::$serverTickTimer->startTiming(); ++$this->tickCounter; $this->checkConsole(); Timings::$connectionTimer->startTiming(); $this->network->processInterfaces(); if ($this->rcon !== null) { $this->rcon->check(); } Timings::$connectionTimer->stopTiming(); Timings::$schedulerTimer->startTiming(); $this->scheduler->mainThreadHeartbeat($this->tickCounter); Timings::$schedulerTimer->stopTiming(); $this->checkTickUpdates($this->tickCounter, $tickTime); foreach ($this->players as $player) { $player->checkNetwork(); } if (($this->tickCounter & 0b1111) === 0) { $this->titleTick(); $this->maxTick = 20; $this->maxUse = 0; if (($this->tickCounter & 0b111111111) === 0) { try { $this->getPluginManager()->callEvent($this->queryRegenerateTask = new QueryRegenerateEvent($this, 5)); if ($this->queryHandler !== null) { $this->queryHandler->regenerateInfo(); } } catch (\Exception $e) { if ($this->logger instanceof MainLogger) { $this->logger->logException($e); } } } $this->getNetwork()->updateName(); } if ($this->autoSave and ++$this->autoSaveTicker >= $this->autoSaveTicks) { $this->autoSaveTicker = 0; $this->doAutoSave(); } if ($this->sendUsageTicker > 0 and --$this->sendUsageTicker === 0) { $this->sendUsageTicker = 6000; $this->sendUsage(SendUsageTask::TYPE_STATUS); } if ($this->tickCounter % 100 === 0) { foreach ($this->levels as $level) { $level->clearCache(); } if ($this->getTicksPerSecondAverage() < 12) { $this->logger->warning($this->getLanguage()->translateString("pocketmine.server.tickOverload")); } } if ($this->dispatchSignals and $this->tickCounter % 5 === 0) { pcntl_signal_dispatch(); } $this->getMemoryManager()->check(); Timings::$serverTickTimer->stopTiming(); $now = microtime(true); $tick = min(20, 1 / max(0.001, $now - $tickTime)); $use = min(1, ($now - $tickTime) / 0.05); TimingsHandler::tick($tick <= $this->profilingTickRate); if ($this->maxTick > $tick) { $this->maxTick = $tick; } if ($this->maxUse < $use) { $this->maxUse = $use; } array_shift($this->tickAverage); $this->tickAverage[] = $tick; array_shift($this->useAverage); $this->useAverage[] = $use; if ($this->nextTick - $tickTime < -1) { $this->nextTick = $tickTime; } else { $this->nextTick += 0.05; } return true; }
public function updateQuery() { try { $this->getPluginManager()->callEvent($this->queryRegenerateTask = new QueryRegenerateEvent($this, 5)); if ($this->queryHandler !== null) { $this->queryHandler->regenerateInfo(); } } catch (\Throwable $e) { $this->logger->logException($e); } }