server = $server; } public function addStatistics($upload, $download){ $this->upload += $upload; $this->download += $download; } public function getUpload(){ return $this->upload; } public function getDownload(){ return $this->download; } public function resetStatistics(){ $this->upload = 0; $this->download = 0; } /** * @return SourceInterface[] */ public function getInterfaces(){ return $this->interfaces; } public function processInterfaces(){ foreach($this->interfaces as $interface){ try{ $interface->process(); }catch(\Throwable $e){ $logger = $this->server->getLogger(); if(\pocketmine\DEBUG > 1){ $logger->logException($e); } $interface->emergencyShutdown(); $this->unregisterInterface($interface); $logger->critical($this->server->getLanguage()->translateString("pocketmine.server.networkError", [get_class($interface), $e->getMessage()])); } } } /** * @param SourceInterface $interface */ public function registerInterface(SourceInterface $interface){ $this->interfaces[$hash = spl_object_hash($interface)] = $interface; if($interface instanceof AdvancedSourceInterface){ $this->advancedInterfaces[$hash] = $interface; $interface->setNetwork($this); } $interface->setName($this->name); } /** * @param SourceInterface $interface */ public function unregisterInterface(SourceInterface $interface){ unset($this->interfaces[$hash = spl_object_hash($interface)], $this->advancedInterfaces[$hash]); } /** * Sets the server name shown on each interface Query * * @param string $name */ public function setName($name){ $this->name = (string) $name; foreach($this->interfaces as $interface){ $interface->setName($this->name); } } public function getName(){ return $this->name; } public function updateName(){ foreach($this->interfaces as $interface){ $interface->setName($this->name); } } public function getServer(){ return $this->server; } /** * @param string $address * @param int $port * @param string $payload */ public function sendPacket($address, $port, $payload){ foreach($this->advancedInterfaces as $interface){ $interface->sendRawPacket($address, $port, $payload); } } /** * Blocks an IP address from the main interface. Setting timeout to -1 will block it forever * * @param string $address * @param int $timeout */ public function blockAddress($address, $timeout = 300){ foreach($this->advancedInterfaces as $interface){ $interface->blockAddress($address, $timeout); } } }