public static function GetInstance() { if (self::$Instance == null) { self::$Instance = new Packet(); Packet::Parse(self::$RawData); } return self::$Instance; }
protected function handleReceive($socket, $data) { $chunkedArray = explode("", $data); array_pop($chunkedArray); foreach ($chunkedArray as $rawData) { Logger::Debug("Received {$data}"); $packet = Packet::Parse($rawData); if (Packet::$IsXML) { $this->handleXmlPacket($socket); } else { $this->handleWorldPacket($socket); } } }
protected function handleWorldPacket($socket) { // p#getdigcooldown is received before xml sometimes.. dunno why if ($this->penguins[$socket]->identified == true || Packet::$Handler == "p#getdigcooldown") { // Bot detection - there's probably a better way of doing this if (Packet::$Handler !== "p#getdigcooldown") { if (Packet::$Handler !== "j#js" && $this->penguins[$socket]->room === null) { return $this->removePenguin($this->penguins[$socket]); } } $worldPacket = Packet::GetInstance(); $penguin = $this->penguins[$socket]; foreach ($this->loadedPlugins as $loadedPlugin) { if ($loadedPlugin->worldStalker) { $loadedPlugin->handleWorldPacket($penguin); } elseif (isset($loadedPlugin->worldHandlers[$worldPacket::$Extension][$worldPacket::$Handler])) { list($handlerCallback, $callInformation) = $loadedPlugin->worldHandlers[$worldPacket::$Extension][$worldPacket::$Handler]; if ($callInformation == Plugin::Before || $callInformation == Plugin::Both) { $loadedPlugin->handleWorldPacket($penguin); } } } if (isset($this->worldHandlers[$worldPacket::$Extension])) { if (!empty($this->worldHandlers[$worldPacket::$Extension])) { if (isset($this->worldHandlers[$worldPacket::$Extension][$worldPacket::$Handler])) { $handlerCallback = $this->worldHandlers[$worldPacket::$Extension][$worldPacket::$Handler]; if (is_array($handlerCallback)) { call_user_func($handlerCallback, $penguin); } elseif (method_exists($this, $handlerCallback)) { call_user_func(array($this, $handlerCallback), $socket); } else { Logger::Warn("Method for {$worldPacket::$Extension}%{$worldPacket::$Handler} is un-callable!"); } } else { Logger::Warn("Method for {$worldPacket::$Extension}%{$worldPacket::$Handler} doesn't exist/has not been set"); } } else { Logger::Warn("There are no handlers for {$worldPacket::$Extension}"); } } else { Logger::Warn("The packet extension '{$worldPacket::$Extension}' is not handled"); } foreach ($this->loadedPlugins as $loadedPlugin) { if ($loadedPlugin->worldStalker) { $loadedPlugin->handleWorldPacket($penguin, false); } elseif (isset($loadedPlugin->worldHandlers[$worldPacket::$Extension][$worldPacket::$Handler])) { list($handlerCallback, $callInformation) = $loadedPlugin->worldHandlers[$worldPacket::$Extension][$worldPacket::$Handler]; if ($callInformation == Plugin::After || $callInformation == Plugin::Both) { $loadedPlugin->handleWorldPacket($penguin, false); } } } } else { $this->removePenguin($this->penguins[$socket]); } }