trim HttpHeaders
石头 编写于 2024-06-22 08:55:23
X
using System;
using System.Xml.Serialization;
using NewLife.Serialization;
using System.IO;

namespace NewLife.Messaging
{
    /// <summary>指定长度的字节数据消息</summary>
    /// <remarks>
    /// 一般用于对数据进行二次包装,理论上,这是一个万能消息。
    /// 数据长度由<see cref="Data"/>决定,以编码整数来存储。
    /// </remarks>
    public class DataMessage : Message
    {
        /// <summary>消息类型</summary>
        [XmlIgnore]
        public override MessageKind Kind { get { return MessageKind.Data; } }

        //private Int32 _Length;
        ///// <summary>长度</summary>
        //public Int32 Length { get { return _Length; } set { _Length = value; } }

        private Byte[] _Data;
        /// <summary>数据</summary>
        public Byte[] Data { get { return _Data; } set { _Data = value; } }

        /// <summary>已重载。</summary>
        /// <param name="stream">数据流</param>
        /// <param name="rwkind">序列化类型</param>
        protected override void OnWrite(Stream stream, RWKinds rwkind)
        {
            // 因为不写对象引用,所以不能为null
            if (Data == null) Data = new Byte[0];

            base.OnWrite(stream, rwkind);
        }

        /// <summary>读写前设置。不使用对象引用</summary>
        /// <param name="rw"></param>
        protected override void OnReadWriteSet(IReaderWriter rw)
        {
            base.OnReadWriteSet(rw);

            rw.Settings.UseObjRef = false;
        }

        #region 辅助
        /// <summary>已重载。</summary>
        /// <returns></returns>
        public override string ToString()
        {
            var data = Data;
            return String.Format("{0} Length={1}", base.ToString(), data != null ? data.Length : 0);
        }
        #endregion
    }
}