示例#1
0
 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;
 }
示例#2
0
 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);
 }