Ejemplo n.º 1
0
        internal void Serialize(BinaryWriter writer)
        {
            IDictionaryEnumerator  e;
            HttpStaticObjectsEntry entry;
            bool hasInstance;

            writer.Write(Count);

            e = _objects.GetEnumerator();
            while (e.MoveNext())
            {
                entry = (HttpStaticObjectsEntry)e.Value;
                writer.Write(entry.Name);
                hasInstance = entry.HasInstance;
                writer.Write(hasInstance);

                if (hasInstance)
                {
                    AltSerialization.WriteValueToStream(entry.Instance, writer);
                }
                else
                {
                    writer.Write(entry.ObjectType.FullName);
                    writer.Write(entry.LateBound);
                }
            }
        }
Ejemplo n.º 2
0
        static internal HttpStaticObjectsCollection Deserialize(BinaryReader reader)
        {
            int    count;
            string name;
            string typename;
            bool   hasInstance;
            Object instance;
            HttpStaticObjectsEntry      entry;
            HttpStaticObjectsCollection col;

            col = new HttpStaticObjectsCollection();

            count = reader.ReadInt32();
            while (count-- > 0)
            {
                name        = reader.ReadString();
                hasInstance = reader.ReadBoolean();
                if (hasInstance)
                {
                    instance = AltSerialization.ReadValueFromStream(reader);
                    entry    = new HttpStaticObjectsEntry(name, instance, 0);
                }
                else
                {
                    typename = reader.ReadString();
                    bool lateBound = reader.ReadBoolean();
                    entry = new HttpStaticObjectsEntry(name, Type.GetType(typename), lateBound);
                }

                col._objects.Add(name, entry);
            }

            return(col);
        }
Ejemplo n.º 3
0
        static internal SessionDictionary Deserialize(BinaryReader reader)
        {
            SessionDictionary d = new SessionDictionary();
            int    count;
            int    nullKey;
            String key;
            Object value;
            int    i;

            count   = reader.ReadInt32();
            nullKey = reader.ReadInt32();

            for (i = 0; i < count; i++)
            {
                if (i == nullKey)
                {
                    key = null;
                }
                else
                {
                    key = reader.ReadString();
                }
                value = AltSerialization.ReadValueFromStream(reader);
                d.BaseSet(key, value);
            }

            d._dirty = false;

            return(d);
        }
Ejemplo n.º 4
0
        public void DeserializeValueFields(object value, AltSerialization serialization)
        {
            IntPtr ptr = IntPtr.Zero;

#if !SAFE_COPY
            ptr = GetPtr(value);
#endif
            DeserializeValueFields(value, serialization, ptr);
        }
Ejemplo n.º 5
0
        public static MemoryStream SerializeToStream(object value, byte useCompression, bool altSerialization = USE_ALT)
        {
            using (var memory = new MemoryStream())
            {
                if (altSerialization)
                {
                    memory.WriteByte((byte)'a');
                    memory.WriteByte(useCompression);
                }
                else
                {
                    if (useCompression > 0)
                    {
                        memory.WriteByte((byte)'c');
                        memory.WriteByte(useCompression);
                    }
                    else
                    {
                        memory.WriteByte((byte)'b');
                    }
                }

                Stream gzip = null;
                switch (useCompression)
                {
                case 0: gzip = memory; break;

                case 1: gzip = new GZipStream(memory, CompressionMode.Compress); break;

                case 2: gzip = new DeflateStream(memory, CompressionMode.Compress); break;
                    //case 3: gzip = new SevenZip.LzmaEncodeStream(memory); break;
                }
                using (gzip)
                {
                    if (altSerialization)
#if !SAFE_COPY
                    { lock (AltSerialization.Locker)
#endif
                        AltSerialization.Serialize(gzip, value); }
                    else
                    {
                        var bi = new BinaryFormatter();
                        bi.Serialize(gzip, value);
                    }
                }
                return(memory);
            }
        }
Ejemplo n.º 6
0
        public static object DeserializeFromStream(Stream stream)
        {
            int dataType = stream.ReadByte();

            if (dataType < 0)
            {
                return(null);
            }

            object o = null;
            byte   useCompression = 0;
            Stream gzip           = null;

            if (dataType == 'c' || dataType == 'a')
            {
                useCompression = (byte)stream.ReadByte();
            }

            switch (useCompression)
            {
            case 0: gzip = stream; break;

            case 1: gzip = new GZipStream(stream, CompressionMode.Decompress); break;

            case 2: gzip = new DeflateStream(stream, CompressionMode.Decompress); break;
                //case 3: gzip = new SevenZip.LzmaDecodeStream(stream); break;
            }
            using (gzip)
            {
                if (dataType == 'a')
#if !SAFE_COPY
                { lock (AltSerialization.Locker)
#endif
                    o = AltSerialization.Deserialize(gzip); }
                else
                {
                    var bi = new BinaryFormatter();
                    o = bi.Deserialize(gzip);
                }
            }
            return(o);
        }
Ejemplo n.º 7
0
        internal void Serialize(BinaryWriter writer)
        {
            int    count;
            int    i;
            String key;
            Object value;

            count = Count;
            writer.Write(count);

            if (BaseGet(null) != null)
            {
                // We have a value with a null key.  Find its index.
                for (i = 0; i < count; i++)
                {
                    key = BaseGetKey(i);
                    if (key == null)
                    {
                        writer.Write(i);
                        break;
                    }
                }

                Debug.Assert(i != count);
            }
            else
            {
                writer.Write(NO_NULL_KEY);
            }

            for (i = 0; i < count; i++)
            {
                key = BaseGetKey(i);
                if (key != null)
                {
                    writer.Write(key);
                }
                value = BaseGet(i);
                AltSerialization.WriteValueToStream(value, writer);
            }
        }
Ejemplo n.º 8
0
        void SerializeValueFields(object value, AltSerialization serialization, IntPtr ptr)
        {
            if (BaseType != null)
            {
                BaseType.SerializeValueFields(value, serialization, ptr);
            }

#if SAFE_COPY
            foreach (var field in ValueFields)
            {
                serialization.Serialize(field.GetValue(value), field.FieldType.IsSealed ? field.FieldType : null);
            }
#else
            if (valueFieldsSize > 0)
            {
                //lock (locker)
                Marshal.Copy(ptr + valueFieldsStart, data, 0, valueFieldsSize);
                serialization.Writer.Write(data, 0, valueFieldsSize);
            }
#endif
        }
Ejemplo n.º 9
0
        void DeserializeValueFields(object value, AltSerialization serialization, IntPtr ptr)
        {
            if (BaseType != null)
            {
                BaseType.DeserializeValueFields(value, serialization, ptr);
            }

#if SAFE_COPY
            foreach (var field in ValueFields)
            {
                field.SetValue(value, serialization.Deserialize(field.FieldType.IsSealed ? field.FieldType : null));
            }
#else
            if (valueFieldsSize > 0)
            {
                //var data = new byte[valueFieldsSize];
                serialization.Reader.Read(data, 0, valueFieldsSize);
                //lock (locker)
                Marshal.Copy(data, 0, ptr + valueFieldsStart, valueFieldsSize);
            }
#endif
        }
Ejemplo n.º 10
0
        public void Serialize(BinaryWriter writer)
        {
            writer.Write(this.Count);
            IDictionaryEnumerator enumerator = this._objects.GetEnumerator();

            while (enumerator.MoveNext())
            {
                HttpStaticObjectsEntry entry = (HttpStaticObjectsEntry)enumerator.Value;
                writer.Write(entry.Name);
                bool hasInstance = entry.HasInstance;
                writer.Write(hasInstance);
                if (hasInstance)
                {
                    AltSerialization.WriteValueToStream(entry.Instance, writer);
                }
                else
                {
                    writer.Write(entry.ObjectType.FullName);
                    writer.Write(entry.LateBound);
                }
            }
        }
Ejemplo n.º 11
0
        public static HttpStaticObjectsCollection Deserialize(BinaryReader reader)
        {
            HttpStaticObjectsCollection objectss = new HttpStaticObjectsCollection();
            int num = reader.ReadInt32();

            while (num-- > 0)
            {
                HttpStaticObjectsEntry entry;
                string name = reader.ReadString();
                if (reader.ReadBoolean())
                {
                    object instance = AltSerialization.ReadValueFromStream(reader);
                    entry = new HttpStaticObjectsEntry(name, instance, 0);
                }
                else
                {
                    string typeName  = reader.ReadString();
                    bool   lateBound = reader.ReadBoolean();
                    entry = new HttpStaticObjectsEntry(name, Type.GetType(typeName), lateBound);
                }
                objectss._objects.Add(name, entry);
            }
            return(objectss);
        }
Ejemplo n.º 12
0
 private void WriteValueToStreamWithAssert(object value, BinaryWriter writer)
 {
     AltSerialization.WriteValueToStream(value, writer);
 }
Ejemplo n.º 13
0
 private object ReadValueFromStreamWithAssert()
 {
     return(AltSerialization.ReadValueFromStream(new BinaryReader(_stream)));
 }