private static function encodeResponse(MappedClass $methodReturnType, $object, $wasThrown, SerializationPolicy $serializationPolicy) { $stream = new ServerSerializationStreamWriter($serializationPolicy); $stream->prepareToWrite(); if ($methodReturnType->getSignature() != TypeSignatures::$VOID) { //!= void.class $stream->serializeValue($object, $methodReturnType); } $bufferStr = ($wasThrown ? "//EX" : "//OK") . $stream->toString(); return $bufferStr; }
private static function encodeResponse(Clazz $responseClass, $object, $wasThrown, $flags, $serializationPolicy) { $stream = new ServerSerializationStreamWriter($serializationPolicy); $stream->setFlags($flags); $stream->prepareToWrite(); if ($responseClass !== Void::typeClass()) { $stream->serializeValue($object, $responseClass); } $bufferStr = ($wasThrown ? '//EX' : '//OK') . (string) $stream; return $bufferStr; }
public function write(ServerSerializationStreamWriter $stream, $instance, MappedClass $instanceClass = null) { $stream->writeInt(count($instance)); for ($i = 0, $n = count($instance); $i < $n; ++$i) { $stream->writeString($instance[$i]); } }
/** * This method takes a string and outputs a JavaScript string literal. The * data is surrounded with quotes, and any contained characters that need to * be escaped are mapped onto their escape sequence. * * Assumptions: We are targeting a version of JavaScript that that is later * than 1.3 that supports unicode strings. */ public static function escapeString($toEscape) { //TODO: implement $charVector = ''; $charVector .= JS_QUOTE_CHAR; $n = strlen($toEscape); $i = 0; while ($i < $n) { $bytes = 0; $c = CharacterUtil::ordUTF8($toEscape, $i, $bytes); $i += $bytes; if (intval($c) < NUMBER_OF_JS_ESCAPED_CHARS && isset(ServerSerializationStreamWriter::$JS_CHARS_ESCAPED[chr($c)])) { $charVector .= JS_ESCAPE_CHAR; $charVector .= ServerSerializationStreamWriter::$JS_CHARS_ESCAPED[chr($c)]; } else { if (ServerSerializationStreamWriter::needsUnicodeEscape($c)) { $charVector .= JS_ESCAPE_CHAR; ServerSerializationStreamWriter::unicodeEscape($c, &$charVector); //$charVector.= JS_ESCAPE_CHAR.'x'. strtoupper(dechex($c)); } else { $charVector .= CharacterUtil::chrUTF8($c); } } } $charVector .= JS_QUOTE_CHAR; return $charVector; }
public static function init() { self::$JS_CHARS_ESCAPED[chr(0)] = '0'; self::$JS_CHARS_ESCAPED[""] = 'b'; self::$JS_CHARS_ESCAPED["\t"] = 't'; self::$JS_CHARS_ESCAPED["\n"] = 'n'; self::$JS_CHARS_ESCAPED["\f"] = 'f'; self::$JS_CHARS_ESCAPED["\r"] = 'r'; self::$JS_CHARS_ESCAPED[self::JS_ESCAPE_CHAR] = self::JS_ESCAPE_CHAR; self::$JS_CHARS_ESCAPED[self::JS_QUOTE_CHAR] = self::JS_QUOTE_CHAR; self::$CLASS_TO_VALUE_WRITER = new IdentityHashMap(); self::$CLASS_TO_VECTOR_WRITER = new IdentityHashMap(); self::$CLASS_TO_VECTOR_WRITER->put(Classes::classOf('boolean[]'), SSSW_VectorWriter::$BOOLEAN_VECTOR); self::$CLASS_TO_VECTOR_WRITER->put(Classes::classOf('byte[]'), SSSW_VectorWriter::$BYTE_VECTOR); self::$CLASS_TO_VECTOR_WRITER->put(Classes::classOf('char[]'), SSSW_VectorWriter::$CHAR_VECTOR); self::$CLASS_TO_VECTOR_WRITER->put(Classes::classOf('double[]'), SSSW_VectorWriter::$DOUBLE_VECTOR); self::$CLASS_TO_VECTOR_WRITER->put(Classes::classOf('float[]'), SSSW_VectorWriter::$FLOAT_VECTOR); self::$CLASS_TO_VECTOR_WRITER->put(Classes::classOf('int[]'), SSSW_VectorWriter::$INT_VECTOR); self::$CLASS_TO_VECTOR_WRITER->put(Classes::classOf('long[]'), SSSW_VectorWriter::$LONG_VECTOR); self::$CLASS_TO_VECTOR_WRITER->put(Classes::classOf('Object[]'), SSSW_VectorWriter::$OBJECT_VECTOR); self::$CLASS_TO_VECTOR_WRITER->put(Classes::classOf('short[]'), SSSW_VectorWriter::$SHORT_VECTOR); self::$CLASS_TO_VECTOR_WRITER->put(Classes::classOf('String[]'), SSSW_VectorWriter::$STRING_VECTOR); self::$CLASS_TO_VALUE_WRITER->put(Boolean::typeClass(), SSSW_ValueWriter::$BOOLEAN); self::$CLASS_TO_VALUE_WRITER->put(Byte::typeClass(), SSSW_ValueWriter::$BYTE); self::$CLASS_TO_VALUE_WRITER->put(Character::typeClass(), SSSW_ValueWriter::$CHAR); self::$CLASS_TO_VALUE_WRITER->put(Double::typeClass(), SSSW_ValueWriter::$DOUBLE); self::$CLASS_TO_VALUE_WRITER->put(Float::typeClass(), SSSW_ValueWriter::$FLOAT); self::$CLASS_TO_VALUE_WRITER->put(Integer::typeClass(), SSSW_ValueWriter::$INT); self::$CLASS_TO_VALUE_WRITER->put(Long::typeClass(), SSSW_ValueWriter::$LONG); self::$CLASS_TO_VALUE_WRITER->put(Object::clazz(), SSSW_ValueWriter::$OBJECT); self::$CLASS_TO_VALUE_WRITER->put(Short::typeClass(), SSSW_ValueWriter::$SHORT); self::$CLASS_TO_VALUE_WRITER->put(String::clazz(), SSSW_ValueWriter::$STRING); }