Ejemplo n.º 1
0
 public static function GetInstance()
 {
     if (self::$Instance == null) {
         self::$Instance = new Packet();
         Packet::Parse(self::$RawData);
     }
     return self::$Instance;
 }
Ejemplo n.º 2
0
 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);
         }
     }
 }
Ejemplo n.º 3
0
 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]);
     }
 }