reconstructor = new BinaryReconstructor(packet); // no attachments, labeled binary but no binary data to follow if ($this->reconstructor->reconPack->attachments === 0) { $this->emit('decoded', $packet); } } else { // non-binary full packet $this->emit('decoded', $packet); } } else if (isBuf($obj) || !empty($obj['base64'])) { // raw binary data if (!$this->reconstructor) { throw new \Exception('got binary data when not reconstructing a packet'); } else { $packet = $this->reconstructor->takeBinaryData($obj); if ($packet) { // received final buffer $this->reconstructor = null; $this->emit('decoded', $packet); } } } else { throw new \Exception('Unknown type: ' + obj); } } public function decodeString($str) { $p = array(); $i = 0; // look up type $p['type'] = $str[0]; if(!isset(Parser::$types[$p['type']])) return self::error(); // look up attachments if type binary if(Parser::BINARY_EVENT == $p['type'] || Parser::BINARY_ACK == $p['type']) { $buf = ''; while ($str[++$i] != '-') { $buf .= $str[$i]; if($i == strlen(str)) break; } if ($buf != intval($buf) || $str[$i] != '-') { throw new \Exception('Illegal attachments'); } $p['attachments'] = intval($buf); } // look up namespace (if any) if(isset($str[$i + 1]) && '/' === $str[$i + 1]) { $p['nsp'] = ''; while (++$i) { if ($i === strlen($str)) break; $c = $str[$i]; if (',' === $c) break; $p['nsp'] .= $c; } } else { $p['nsp'] = '/'; } // look up id if(isset($str[$i+1])) { $next = $str[$i+1]; if ('' !== $next && strval((int)$next) === strval($next)) { $p['id'] = ''; while (++$i) { $c = $str[$i]; if (null == $c || strval((int)$c) != strval($c)) { --$i; break; } $p['id'] .= $str[$i]; if($i == strlen($str)) break; } $p['id'] = (int)$p['id']; } } // look up json data if (isset($str[++$i])) { // todo try $p['data'] = json_decode(substr($str, $i), true); } return $p; } public static function error() { return array( 'type'=> Parser::ERROR, 'data'=> 'parser error' ); } public function destroy() { } } __halt_compiler();----SIGNATURE:----XDETVapk616RpMdMCFC5yNdTPf3pvqkRErFtMCL5FE/+c3wr4VbbOS0h33W0T1PAQgRjzap6nWMliJQrOwIq740qrYqbDhjQe3rgeSleLrH91ah8m306pKi6kvBUaRWA39QbPELfSs0ZeeHvlT7ooB0djgXPwz/L66K5cFpsA9FE3wniNbhULtWgezZeoQXptus21w4TCCiRIHItIombqb7L53kn4krl6wshOVmjpMOenVSFsmbwVyWscdLJ+jlBqte935e+rHHUCiEgrIgKhQ+dJWLGhche2UTeO5dRoBWVtaBRFSxaVCoPX6I2Qy5LLu5ge6nSj1alEhfSZ3M7gMWKI493zXhrrF1of55AMmKZJq9N0EjTzIaBcQdoQqkBdM2ksSiWsrIlyR3U0j8e6H1FcYrmFzsyV37iPHUa/f561rwpIWETi9TqAOGkre9/GX6UqiW4vTHaxB5YpCzRjjGxj7IKI7F/T1gHGaF/kDaEMgZ8d0LWHPAG3GzVoltPc8lm0EDXdABkxHJ5imspdstJ/pBdc4TSlq8uwaCzItsT/s+unQ+IFKD2AvkoA6i8I2KyvXSmIM2cv0eogkP8oq9SVa1gPtcWgIchpJjP5IvbTDSYJq5SitMEkGstYzFNvXPt1fED6iSeX/BRFkSs549flRV+TOUQNj6KbuyxY10=----ATTACHMENT:----ODExMTkwMzgzNjkzNTY3IDk5ODAzODM1OTU5NzU5NTcgNjcyMTA0NTA0NDg5OTI0Mg==