public IAdaptingType read(FlashorbBinaryReader reader, ParseContext parseContext) { int refId = reader.ReadVarInteger(); if ((refId & 0x1) == 0) { return(parseContext.getReference(refId >> 1)); } int arraySize = refId >> 1; IAdaptingType adaptingType = null; object container = null; while (true) { string str = ReaderUtils.readString(reader, parseContext); if (str == null || str.Length == 0) { break; } if (container == null) { container = new Dictionary <object, object>(); adaptingType = new AnonymousObject((IDictionary)container); parseContext.addReference(adaptingType); } object obj = RequestParser.readData(reader, parseContext); ((IDictionary)container)[str] = obj; } if (adaptingType == null) { container = new object[arraySize]; adaptingType = new ArrayType((object[])container); parseContext.addReference(adaptingType); for (int i = 0; i < arraySize; i++) { ((object[])container)[i] = RequestParser.readData(reader, parseContext); } } else { for (int i = 0; i < arraySize; i++) { object obj = RequestParser.readData(reader, parseContext); ((IDictionary)container)[i.ToString()] = obj; } } return(adaptingType); }
public IAdaptingType read(FlashorbBinaryReader reader, ParseContext parseContext) { int handle = reader.ReadVarInteger(); bool inline = ((handle & 1) != 0); handle = handle >> 1; if (inline) { object[] array = new object[handle]; ArrayType ar = new ArrayType(array); parseContext.addReference(ar); // whether vector is readonly int @fixed = reader.ReadVarInteger(); if (!typeof(T).IsValueType) { // type name of the vector's elements string elementTypeName = ReaderUtils.readString(reader, parseContext); } for (int i = 0; i < handle; i++) { if (typeof(T) == typeof(int)) { array[i] = reader.ReadInteger(); } else if (typeof(T) == typeof(uint)) { array[i] = reader.ReadUInteger(); } else if (typeof(T) == typeof(double)) { array[i] = reader.ReadDouble(); } else { array[i] = RequestParser.readData(reader, parseContext); //array[ i ] = objectReader.read( reader, parseContext ); } } return(ar); } else { return(parseContext.getReference(handle)); } }
private ClassInfo getClassInfo(int refId, FlashorbBinaryReader reader, ParseContext parseContext) { if ((refId & 0x3) == 1) { return((ClassInfo)parseContext.getClassInfoReference(refId >> 2)); } ClassInfo classInfo = new ClassInfo(); classInfo.externalizable = (refId & 0x4) == 4; classInfo.looseProps = (refId & 0x8) == 8; classInfo.className = ReaderUtils.readString(reader, parseContext); int propsCount = refId >> 4; for (int i = 0; i < propsCount; i++) { classInfo.addProperty(ReaderUtils.readString(reader, parseContext)); } parseContext.addClassInfoReference(classInfo); return(classInfo); }
public IAdaptingType read(FlashorbBinaryReader reader, ParseContext parseContext) { int refId = reader.ReadVarInteger(); if ((refId & 0x1) == 0) { return((IAdaptingType)parseContext.getReference(refId >> 1)); } ClassInfo classInfo = getClassInfo(refId, reader, parseContext); Type mappedType = null; if (!string.IsNullOrEmpty(classInfo.className)) { mappedType = Types.Types.getServerTypeForClientClass(classInfo.className); } if (classInfo.externalizable || typeof(IExternalizable).IsAssignableFrom(mappedType)) { Type type = Types.Types.getServerTypeForClientClass(classInfo.className); object extobj = null; if (type != null) { extobj = ObjectFactories.CreateServiceObject(type); } else { extobj = ObjectFactories.CreateServiceObject(classInfo.className); } if (!(extobj is IExternalizable)) { throw new Exception("object must implement IExternalizable"); } else { CacheableAdaptingTypeWrapper wrapper = new CacheableAdaptingTypeWrapper(); parseContext.addReference(wrapper); IAdaptingType returnValue = null; extobj = ((IExternalizable)extobj).readExternal(reader, parseContext); if (extobj is IAdaptingType) { returnValue = (IAdaptingType)extobj; } else { returnValue = new ConcreteObject(extobj); } wrapper.setType(returnValue); return(returnValue); } } else { Dictionary <String, IAdaptingType> props = new Dictionary <String, IAdaptingType>(); AnonymousObject anonObj = new AnonymousObject(); IAdaptingType returnValue = anonObj; if (classInfo.className != null && classInfo.className.Length > 0) { returnValue = new NamedObject(classInfo.className, anonObj); } parseContext.addReference(returnValue); int propCount = classInfo.getPropertyCount(); for (int i = 0; i < propCount; i++) { if (Log.isLogging(LoggingConstants.DEBUG)) { Log.log(LoggingConstants.DEBUG, "reading object property " + classInfo.getProperty(i)); } props[classInfo.getProperty(i)] = RequestParser.readData(reader, parseContext); } if (classInfo.looseProps) { while (true) { string propName = ReaderUtils.readString(reader, parseContext); if (propName == null || propName.Length == 0) { break; } props[propName] = RequestParser.readData(reader, parseContext); } } anonObj.Properties = props; return(returnValue); } }
public IAdaptingType read(FlashorbBinaryReader reader, ParseContext parseContext) { return(new StringType(ReaderUtils.readString(reader, parseContext))); }