app = $app; $this->clientManager = new ClientManager(); $this->packetManager = new PacketManager($this->app->router, $this->app->dispatcher); } /** * Disconnect from server. * * @return void * * @since 1.0.0 */ private function disconnect() : void { $this->run = false; } /** * {@inheritdoc} */ public function create(string $ip, int $port) : void { parent::create($ip, $port); } /** * {@inheritdoc} */ public function run() : void { \socket_connect($this->sock, $this->ip, $this->port); $errorCounter = 0; while ($this->run) { try { if (!empty($this->packets)) { $msg = \array_shift($this->packets); \socket_write($this->sock, $msg, \strlen($msg)); } $read = [$this->sock]; if (\socket_last_error() !== 0) { ++$errorCounter; } // todo: create reset condition for errorCounter. Probably if a successfull read happened //if (socket_select($read, $write = null, $except = null, 0) < 1) { // error // socket_last_error(); // socket_strerror(socket_last_error()); //} if (\count($read) > 0) { $data = \socket_read($this->sock, 1024); var_dump($data); /* Server no data */ if ($data === false) { continue; } /* Normalize */ $data = \trim($data); if (!empty($data)) { $data = \explode(' ', $data); $this->commands->trigger($data[0], 0, $data); } } if ($errorCounter > 10) { $this->run = false; } } catch (\Throwable $e) { $this->run = false; } } $this->close(); } public function shutdown() : void { $this->run = false; } public function addPacket($packet) : void { $this->packets[] = $packet; } /** * {@inheritdoc} */ public function close() : void { parent::close(); } /** * {@inheritdoc} */ public function __destruct() { parent::__destruct(); } }