浏览代码

UPdated IPackable classes

Kenric Nugteren 2 年之前
父节点
当前提交
65048f8389

+ 5 - 3
InABox.Core/CoreAttribute.cs

@@ -1,4 +1,6 @@
-namespace InABox.Core
+using System.IO;
+
+namespace InABox.Core
 {
     [Caption("Attributes")]
     public class CoreAttribute : BaseObject, ISequenceable, IPackable
@@ -7,14 +9,14 @@
 
         public string Value { get; set; }
 
-        public void Pack(FastBinaryWriter writer)
+        public void Pack(BinaryWriter writer)
         {
             writer.Write(Sequence);
             writer.Write(Name);
             writer.Write(Value);
         }
 
-        public void Unpack(FastBinaryReader reader)
+        public void Unpack(BinaryReader reader)
         {
             Sequence = reader.ReadInt64();
             Name = reader.ReadString();

+ 11 - 10
InABox.Core/PackableDictionary.cs

@@ -1,11 +1,12 @@
 using System;
 using System.Collections.Generic;
+using System.IO;
 
 namespace InABox.Core
 {
     public abstract class PackableDictionary<T> : Dictionary<string, T>, IPackable
     {
-        public void Pack(FastBinaryWriter writer)
+        public void Pack(BinaryWriter writer)
         {
             writer.Write(Count);
             foreach (var key in Keys)
@@ -15,7 +16,7 @@ namespace InABox.Core
             }
         }
 
-        public void Unpack(FastBinaryReader reader)
+        public void Unpack(BinaryReader reader)
         {
             Clear();
             var iCount = reader.ReadInt32();
@@ -56,19 +57,19 @@ namespace InABox.Core
             return true;
         }
 
-        public abstract void PackItem(FastBinaryWriter writer, T value);
+        public abstract void PackItem(BinaryWriter writer, T value);
 
-        public abstract T UnpackItem(FastBinaryReader reader);
+        public abstract T UnpackItem(BinaryReader reader);
     }
 
     public class PackableStringDictionary : PackableDictionary<string>
     {
-        public override void PackItem(FastBinaryWriter writer, string value)
+        public override void PackItem(BinaryWriter writer, string value)
         {
             writer.Write(value);
         }
 
-        public override string UnpackItem(FastBinaryReader reader)
+        public override string UnpackItem(BinaryReader reader)
         {
             return reader.ReadString();
         }
@@ -76,12 +77,12 @@ namespace InABox.Core
 
     public class PackableBooleanDictionary : PackableDictionary<bool>
     {
-        public override void PackItem(FastBinaryWriter writer, bool value)
+        public override void PackItem(BinaryWriter writer, bool value)
         {
             writer.Write(value);
         }
 
-        public override bool UnpackItem(FastBinaryReader reader)
+        public override bool UnpackItem(BinaryReader reader)
         {
             return reader.ReadBoolean();
         }
@@ -133,7 +134,7 @@ namespace InABox.Core
         }
 
 
-        public override void PackItem(FastBinaryWriter writer, object value)
+        public override void PackItem(BinaryWriter writer, object value)
         {
             if (value == null)
             {
@@ -148,7 +149,7 @@ namespace InABox.Core
             }
         }
 
-        public override object UnpackItem(FastBinaryReader reader)
+        public override object UnpackItem(BinaryReader reader)
         {
             var index = reader.ReadInt16();
             var type = GetType(index);

+ 3 - 2
InABox.Core/PackableList.cs

@@ -1,4 +1,5 @@
 using System.Collections;
+using System.IO;
 
 namespace InABox.Core
 {
@@ -8,14 +9,14 @@ namespace InABox.Core
 
     public class PackableList<T> : ObservableList<T>, IPackableList where T : BaseObject, IPackable, new()
     {
-        public void Pack(FastBinaryWriter writer)
+        public void Pack(BinaryWriter writer)
         {
             writer.Write(Count);
             foreach (var item in this)
                 item.Pack(writer);
         }
 
-        public void Unpack(FastBinaryReader reader)
+        public void Unpack(BinaryReader reader)
         {
             var iCount = reader.ReadInt32();
             for (var i = 0; i < iCount; i++)

+ 7 - 6
InABox.Core/UserProperties.cs

@@ -1,6 +1,7 @@
 using System;
 using System.Collections.Generic;
 using System.ComponentModel;
+using System.IO;
 using System.Linq;
 using Newtonsoft.Json;
 
@@ -13,13 +14,13 @@ namespace InABox.Core
 
         public object? Value { get; set; }
 
-        public void Pack(FastBinaryWriter writer)
+        public void Pack(BinaryWriter writer)
         {
             writer.Write(Type.EntityName());
             writer.Write(Value?.ToString() ?? "");
         }
 
-        public void Unpack(FastBinaryReader reader)
+        public void Unpack(BinaryReader reader)
         {
             Type = CoreUtils.GetEntity(reader.ReadString());
             Value = CoreUtils.ChangeType(reader.ReadString(), Type);
@@ -28,12 +29,12 @@ namespace InABox.Core
 
     public class UserPropertyDictionary : PackableDictionary<UserProperty>
     {
-        public override void PackItem(FastBinaryWriter writer, UserProperty value)
+        public override void PackItem(BinaryWriter writer, UserProperty value)
         {
             value.Pack(writer);
         }
 
-        public override UserProperty UnpackItem(FastBinaryReader reader)
+        public override UserProperty UnpackItem(BinaryReader reader)
         {
             var result = new UserProperty();
             result.Unpack(reader);
@@ -84,12 +85,12 @@ namespace InABox.Core
         [JsonIgnore]
         public int Count => Dictionary.Count;
 
-        public void Pack(FastBinaryWriter writer)
+        public void Pack(BinaryWriter writer)
         {
             Dictionary.Pack(writer);
         }
 
-        public void Unpack(FastBinaryReader reader)
+        public void Unpack(BinaryReader reader)
         {
             Dictionary.Unpack(reader);
         }

+ 11 - 7
inabox.database.sqlite/SQLiteProvider.cs

@@ -1157,7 +1157,10 @@ namespace InABox.Database.SQLite
                 if (!IsNull(o))
                 {
                     if (o is byte[] array)
-                        packable.Unpack(new FastBinaryReader(array));
+                    {
+                        using (var ms = new MemoryStream(array))
+                            packable.Unpack(new BinaryReader(ms));
+                    }
                 }
 
                 return packable;
@@ -1255,12 +1258,13 @@ namespace InABox.Database.SQLite
                     return ms.GetBuffer();
                 }
 
-            if (o is IPackable)
-                using (var writer = new FastBinaryWriter())
-                {
-                    ((IPackable)o).Pack(writer);
-                    return writer.GetBuffer();
-                }
+            if (o is IPackable pack)
+            {
+                using var ms = new MemoryStream();
+                using var writer = new BinaryWriter(ms);
+                pack.Pack(writer);
+                return ms.ToArray();
+            }
 
             if (o.GetType() == typeof(double) && o.Equals(default(double)))
                 return DBNull.Value;