public function openSession($identifier, $address, $port, $clientID) { $ev = new PlayerCreationEvent($this, Player::class, Player::class, \null, $address, $port); $this->server->getPluginManager()->callEvent($ev); $class = $ev->getPlayerClass(); $player = new $class($this, $ev->getClientId(), $ev->getAddress(), $ev->getPort()); $this->players[$identifier] = $player; $this->identifiersACK[$identifier] = 0; $this->identifiers->attach($player, $identifier); $this->server->addPlayer($identifier, $player); }
public function handleDataPacket(DataPacket $pk) { $this->logger->debug("Received packet " . $pk::NETWORK_ID . " from {$this->serverIp}:{$this->port}"); switch ($pk::NETWORK_ID) { case Info::INFORMATION_PACKET: /** @var InformationPacket $pk */ switch ($pk->type) { case InformationPacket::TYPE_LOGIN: if ($pk->message == InformationPacket::INFO_LOGIN_SUCCESS) { $this->logger->info("Login success to {$this->serverIp}:{$this->port}"); $this->verified = true; } elseif ($pk->message == InformationPacket::INFO_LOGIN_FAILED) { $this->logger->info("Login failed to {$this->serverIp}:{$this->port}"); } break; case InformationPacket::TYPE_CLIENT_DATA: $this->clientData = json_decode($pk->message, true); $this->lastRecvInfo = microtime(); break; } break; case Info::PLAYER_LOGIN_PACKET: /** @var PlayerLoginPacket $pk */ $player = new Player($this->synLibInterface, mt_rand(0, PHP_INT_MAX), $pk->address, $pk->port); $player->setUniqueId($pk->uuid); $this->server->addPlayer(spl_object_hash($player), $player); $this->players[$pk->uuid->toBinary()] = $player; $player->handleLoginPacket($pk); break; case Info::REDIRECT_PACKET: /** @var RedirectPacket $pk */ if (isset($this->players[$uuid = $pk->uuid->toBinary()])) { $pk = $this->getPacket($pk->mcpeBuffer); $pk->decode(); $this->players[$uuid]->handleDataPacket($pk); } break; case Info::PLAYER_LOGOUT_PACKET: /** @var PlayerLogoutPacket $pk */ if (isset($this->players[$uuid = $pk->uuid->toBinary()])) { $this->players[$uuid]->setConnected(false); $this->players[$uuid]->close("", $pk->reason); $this->removePlayer($this->players[$uuid]); } break; } }