Пример #1
0
 public static void SerializeList <T>(this BitStream bs, ref List <T> list, SerializeCallback <T> serializer)
 {
     if (bs.Writing)
     {
         T item;
         bs.WriteVariant((uint)list.Count);
         for (int i = 0; i < list.Count; i++)
         {
             item = list[i];
             serializer(bs, ref item);
         }
     }
     else
     {
         T   item  = default(T);
         int count = (int)bs.ReadUInt32Variant();
         list = list ?? new List <T>(count);
         list.Clear();
         for (int i = 0; i < count; i++)
         {
             serializer(bs, ref item);
             list.Add(item);
         }
     }
 }
Пример #2
0
 static void Serialize <T>(this BitStream bs, T[] data, int len, SerializeCallback <T> serializer)
 {
     for (int i = 0; i < len; i++)
     {
         serializer(bs, ref data[i]);
     }
 }
 protected AGSScriptManagedObject(string type)
 {
     this.typeName = Marshal.StringToHGlobalAnsi(type);
     this.disposeCallback = this.Dispose;
     this.getTypeCallback = (() => this.typeName);
     this.serializeCallback = this.Serialize;
     this.Handle = NativeMethods.ScriptManagedObject_Create(
         Marshal.GetFunctionPointerForDelegate(this.disposeCallback),
         Marshal.GetFunctionPointerForDelegate(this.getTypeCallback),
         Marshal.GetFunctionPointerForDelegate(this.serializeCallback));
 }
Пример #4
0
        private string SerializeArray(IEnumerable objs, SerializeCallback sc)
        {
            var elements = "";

            foreach (var obj in objs)
            {
                elements += sc(obj);
            }

            return("<array>" + elements + "</array>");
        }
Пример #5
0
        /// <summary>
        /// 注册序列化回调函数。
        /// </summary>
        /// <param name="version">序列化回调函数的版本。</param>
        /// <param name="callback">序列化回调函数。</param>
        public void RegisterSerializeCallback(byte version, SerializeCallback callback)
        {
            if (callback == null)
            {
                throw new GXException("Serialize callback is invalid.");
            }

            m_SerializeCallbacks[version] = callback;
            if (version > m_LatestSerializeCallbackVersion)
            {
                m_LatestSerializeCallbackVersion = version;
            }
        }
Пример #6
0
        /// <summary>
        /// 序列化数据到目标流中。
        /// </summary>
        /// <param name="stream">目标流。</param>
        /// <param name="data">要序列化的数据。</param>
        /// <param name="version">序列化回调函数的版本。</param>
        /// <returns>是否序列化数据成功。</returns>
        public bool Serialize(Stream stream, T data, byte version)
        {
            byte[] header = GetHeader();
            stream.WriteByte(header[0]);
            stream.WriteByte(header[1]);
            stream.WriteByte(header[2]);
            stream.WriteByte(version);
            SerializeCallback callback = null;

            if (!m_SerializeCallbacks.TryGetValue(version, out callback))
            {
                throw new GameFrameworkException(Utility.Text.Format("Serialize callback '{0}' is not exist.", version.ToString()));
            }

            return(callback(stream, data));
        }
Пример #7
0
        /// <summary>
        /// 序列化数据到目标流中。
        /// </summary>
        /// <param name="stream">目标流。</param>
        /// <param name="data">要序列化的数据。</param>
        /// <param name="version">序列化回调函数的版本。</param>
        /// <returns>序列化数据是否成功。</returns>
        public bool Serialize(Stream stream, T data, byte version)
        {
            using (BinaryWriter binaryWriter = new BinaryWriter(stream, Encoding.UTF8))
            {
                byte[] header = GetHeader();
                binaryWriter.Write(header[0]);
                binaryWriter.Write(header[1]);
                binaryWriter.Write(header[2]);
                binaryWriter.Write(version);
                SerializeCallback callback = null;
                if (!m_SerializeCallbacks.TryGetValue(version, out callback))
                {
                    throw new GXException(Utility.Text.Format("Serialize callback '{0}' is not exist.", version.ToString()));
                }

                return(callback(binaryWriter, data));
            }
        }