Beispiel #1
0
        /// <summary>
        ///     从第三方客户数据转换为元数据
        /// </summary>
        /// <param name="proxy">内存片段代理器</param>
        /// <param name="attribute">字段属性</param>
        /// <param name="analyseResult">分析结果</param>
        /// <param name="target">目标对象实例</param>
        /// <param name="isArrayElement">当前写入的值是否为数组元素标示</param>
        /// <param name="isNullable">是否为可空字段标示</param>
        public override void Process(IMemorySegmentProxy proxy, IntellectPropertyAttribute attribute, ToBytesAnalyseResult analyseResult, object target, bool isArrayElement = false, bool isNullable = false)
        {
            IPEndPoint[] value = analyseResult.GetValue <IPEndPoint[]>(target);
            if (value == null)
            {
                if (!attribute.IsRequire)
                {
                    return;
                }
                throw new PropertyNullValueException(string.Format(ExceptionMessage.EX_PROPERTY_VALUE, attribute.Id, analyseResult.Property.Name, analyseResult.Property.PropertyType));
            }
            //id(1) + total length(4) + rank(4)
            proxy.WriteByte((byte)attribute.Id);
            MemoryPosition position = proxy.GetPosition();

            proxy.Skip(4U);
            proxy.WriteInt32(value.Length);
            if (value.Length == 0)
            {
                proxy.WriteBackInt32(position, 4);
                return;
            }
            for (int i = 0; i < value.Length; i++)
            {
                proxy.WriteIPEndPoint(value[i]);
            }
            proxy.WriteBackInt32(position, (int)(value.Length * Size.IPEndPoint + 4));
        }
        /// <summary>
        ///     从第三方客户数据转换为元数据
        ///     <para>* 此方法将会被轻量级的DataHelper所使用,并且写入的数据将不会拥有编号(Id)</para>
        /// </summary>
        /// <param name="proxy">内存片段代理器</param>
        /// <param name="target">目标对象实例</param>
        /// <param name="isArrayElement">当前写入的值是否为数组元素标示</param>
        /// <param name="isNullable">是否为可空字段标示</param>
        public override void Process(IMemorySegmentProxy proxy, object target, bool isArrayElement = false, bool isNullable = false)
        {
            if (target == null)
            {
                return;
            }
            IPEndPoint value = (IPEndPoint)target;

            proxy.WriteIPEndPoint(value);
        }
Beispiel #3
0
 /// <summary>
 ///     从第三方客户数据转换为元数据
 ///     <para>* 此方法将会被轻量级的DataHelper所使用,并且写入的数据将不会拥有编号(Id)</para>
 /// </summary>
 /// <param name="proxy">内存片段代理器</param>
 /// <param name="target">目标对象实例</param>
 /// <param name="isArrayElement">当前写入的值是否为数组元素标示</param>
 /// <param name="isNullable">是否为可空字段标示</param>
 public override void Process(IMemorySegmentProxy proxy, object target, bool isArrayElement = false, bool isNullable = false)
 {
     IPEndPoint[] array = (IPEndPoint[])target;
     if (array == null || array.Length == 0)
     {
         return;
     }
     for (int i = 0; i < array.Length; i++)
     {
         proxy.WriteIPEndPoint(array[i]);
     }
 }
Beispiel #4
0
 /// <summary>
 ///   序列化当前事务唯一标示
 /// </summary>
 /// <param name="id">如果是以智能对象的方式进行序列化,则此ID为标签ID</param>
 /// <param name="serializationType">序列化方式</param>
 /// <param name="identity">被序列化的事务唯一标示</param>
 /// <param name="proxy">内存片段代理器</param>
 public static void Serialize(byte id, IdentitySerializationTypes serializationType, TCPTransactionIdentity identity, IMemorySegmentProxy proxy)
 {
     if (serializationType == IdentitySerializationTypes.IntellectObject)
     {
         //writes attribute id.
         proxy.WriteByte(id);
         //writes TCP transaction identity total length.
         proxy.WriteInt32(19);
     }
     proxy.WriteByte((byte)identity.IdentityType);
     proxy.WriteByte((byte)(identity.IsRequest ? 1 : 0));
     proxy.WriteByte((byte)(identity.IsOneway ? 1 : 0));
     proxy.WriteIPEndPoint((IPEndPoint)identity.EndPoint);
     proxy.WriteUInt32(identity.MessageId);
 }
        /// <summary>
        ///     从第三方客户数据转换为元数据
        /// </summary>
        /// <param name="proxy">内存片段代理器</param>
        /// <param name="attribute">字段属性</param>
        /// <param name="analyseResult">分析结果</param>
        /// <param name="target">目标对象实例</param>
        /// <param name="isArrayElement">当前写入的值是否为数组元素标示</param>
        public override void Process(IMemorySegmentProxy proxy, IntellectPropertyAttribute attribute, ToBytesAnalyseResult analyseResult, object target, bool isArrayElement = false, bool isNullable = false)
        {
            IPEndPoint value = analyseResult.GetValue <IPEndPoint>(target);

            if (value == null)
            {
                if (!attribute.IsRequire)
                {
                    return;
                }
                throw new PropertyNullValueException(string.Format(ExceptionMessage.EX_PROPERTY_VALUE, attribute.Id, analyseResult.Property.Name, analyseResult.Property.PropertyType));
            }
            proxy.WriteByte((byte)attribute.Id);
            proxy.WriteIPEndPoint(value);
        }
Beispiel #6
0
 /// <summary>
 ///     第三方数据转换成元数据
 /// </summary>
 /// <param name="proxy">内存段实例</param>
 /// <param name="baseValueMessage">存储属性的实例对象</param>
 /// <exception cref="ArgumentNullException">参数不能为空</exception>
 public void ValueProcessor(IMemorySegmentProxy proxy, BaseValueStored baseValueMessage)
 {
     if (proxy == null)
     {
         throw new ArgumentNullException("proxy");
     }
     if (baseValueMessage == null)
     {
         throw new ArgumentNullException("baseValueMessage");
     }
     IPEndPoint[] array = baseValueMessage.GetValue <IPEndPoint[]>();
     if (array == null)
     {
         throw new NullReferenceException(string.Format("#The processed value is null, type Id is: {0}", baseValueMessage.TypeId));
     }
     if (array.Length == 0)
     {
         return;
     }
     for (int i = 0; i < array.Length; i++)
     {
         proxy.WriteIPEndPoint(array[i]);
     }
 }