示例#1
0
        public Type ReadType(VoxBinaryReader reader)
        {
            var typeCount = reader.ReadVariableInt();
            var typeIds   = GetTypeIdBuffer(typeCount);

            for (var i = 0; i < typeCount; i++)
            {
                typeIds[i] = reader.ReadVariableInt();
            }
            var key = new TypeIdsAndCount {
                Count = typeCount, TypeIds = typeIds
            };
            var result = typesByTypeIdParts.GetOrAdd(key, cloneKeyFunc, unpackTypesFunc);

            return(result);
        }
        public object ReadBody(VoxBinaryReader reader)
        {
            var dataLength = reader.ReadVariableInt();

            reader.HandleEnterInnerBuffer(dataLength);
            try {
                var elementCount = reader.ReadVariableInt();
                var elements     = Array.CreateInstance(elementType, elementCount);
                for (var i = 0; i < elements.Length; i++)
                {
                    var thing = thingReaderWriterDispatcherThing.ReadThing(reader, null);
                    elements.SetValue(thing, i);
                }
                return(InternalRepresentationToHintTypeConverter.ConvertCollectionToHintType(elements, userCollectionType));
            } finally {
                reader.HandleLeaveInnerBuffer();
            }
        }
        public object ReadBody(VoxBinaryReader reader)
        {
            var length = reader.ReadVariableInt();

            reader.HandleEnterInnerBuffer(length);
            try {
                var slotCount   = reader.ReadVariableInt();
                var readerThing = new ReaderThing(thisIsTotesTheRealLegitThingReaderWriterThing, reader, slotCount);
                try {
                    var subject = Activator.CreateInstance(typeof(TUserType));
                    userTypeSerializer.Deserialize(readerThing, (TUserType)subject);
                    return(subject);
                } catch (Exception e) {
                    logger.Error($"Failed to instantiate or deserialize instance of type {typeof(TUserType).Name}.");
                    throw;
                }
            } finally {
                reader.HandleLeaveInnerBuffer();
            }
        }
示例#4
0
        public object ReadBody(VoxBinaryReader reader)
        {
            var length = reader.ReadVariableInt();

            reader.HandleEnterInnerBuffer(length);
            try {
                var key   = thisIsTotesTheRealLegitThingReaderWriterThing.ReadThing(reader, userKeyType);
                var value = thisIsTotesTheRealLegitThingReaderWriterThing.ReadThing(reader, userValueType);
                return(Activator.CreateInstance(userKvpType, key, value));
            } finally {
                reader.HandleLeaveInnerBuffer();
            }
        }