示例#1
0
        public void Write(ITcpTypeData dataSource, ref int startPositionInDataSource)
        {
            if (dataSource == null)
            {
                throw new ArgumentNullException(nameof(dataSource));
            }
            if (startPositionInDataSource < 0 || startPositionInDataSource > dataSource.Length)
            {
                throw new ArgumentOutOfRangeException(nameof(startPositionInDataSource));
            }
            if (dataSource.Length < (startPositionInDataSource + DataLength))
            {
                throw new ArgumentException(string.Empty, nameof(startPositionInDataSource));
            }

            //-----------------------------------------------------------------
            var tmp = new UnionValue
            {
                Data =
                {
                    Part0 = dataSource[startPositionInDataSource],
                    Part1 = dataSource[startPositionInDataSource + 1],
                    Part2 = dataSource[startPositionInDataSource + 2],
                    Part3 = dataSource[startPositionInDataSource + 3]
                }
            };

            //-----------------------------------------------------------------
            Value = _bigEndian ? IPAddress.NetworkToHostOrder(tmp.Value) : tmp.Value;
            //-----------------------------------------------------------------
            startPositionInDataSource += DataLength;
        }
        public void Write(ITcpTypeData dataSource, ref int startPositionInDataSource)
        {
            if (dataSource == null)
            {
                throw new ArgumentNullException(nameof(dataSource));
            }
            if (startPositionInDataSource < 0 || startPositionInDataSource > dataSource.Length)
            {
                throw new ArgumentOutOfRangeException(nameof(startPositionInDataSource));
            }

            //-----------------------------------------------------------------
            var length = CreateHeader(_headerBigEndian, 0);

            length.Write(dataSource, ref startPositionInDataSource);
            var dataLength = GetHeaderValue(length);

            //-----------------------------------------------------------------
            if (dataSource.Length < (startPositionInDataSource + dataLength))
            {
                throw new ArgumentException(string.Empty, nameof(dataSource));
            }

            //-----------------------------------------------------------------
            _valueBytes.Clear();
            //-----------------------------------------------------------------
            for (var i = 0; i < dataLength; i++)
            {
                _valueBytes.Add(dataSource[startPositionInDataSource + i]);
            }
            //-----------------------------------------------------------------
            _value = _encoding.GetString(_valueBytes.ToArray());
            //-----------------------------------------------------------------
            startPositionInDataSource += dataLength;
        }
示例#3
0
        public void Read(ITcpTypeData dataTarget, ref int startPositionInDataTarget)
        {
            if (dataTarget == null)
            {
                throw new ArgumentNullException(nameof(dataTarget));
            }
            if (startPositionInDataTarget < 0 || startPositionInDataTarget > dataTarget.Length)
            {
                throw new ArgumentOutOfRangeException(nameof(startPositionInDataTarget));
            }
            if (dataTarget.Length < (startPositionInDataTarget + DataLength))
            {
                throw new ArgumentException(string.Empty, nameof(startPositionInDataTarget));
            }

            //-----------------------------------------------------------------
            var tmp = new UnionValue
            {
                Value = _bigEndian ? IPAddress.HostToNetworkOrder(Value) : Value
            };

            //-----------------------------------------------------------------
            dataTarget[startPositionInDataTarget]     = tmp.Data.Part0;
            dataTarget[startPositionInDataTarget + 1] = tmp.Data.Part1;
            dataTarget[startPositionInDataTarget + 2] = tmp.Data.Part2;
            dataTarget[startPositionInDataTarget + 3] = tmp.Data.Part3;
            //-----------------------------------------------------------------
            startPositionInDataTarget += DataLength;
        }
示例#4
0
        public override void Write(ITcpTypeData dataSource, ref int startPositionInDataSource)
        {
            if (dataSource == null)
            {
                throw new ArgumentNullException(nameof(dataSource));
            }
            if (startPositionInDataSource < 0 || startPositionInDataSource > dataSource.Length)
            {
                throw new ArgumentOutOfRangeException(nameof(startPositionInDataSource));
            }

            //-----------------------------------------------------------------
            var count = CreateCount(_bigEndian);

            count.Write(dataSource, ref startPositionInDataSource);
            var dataLength = TcpConvert.ToInt32(count);

            //-----------------------------------------------------------------
            if (dataSource.Length < (startPositionInDataSource + dataLength))
            {
                throw new ArgumentException(string.Empty, nameof(dataSource));
            }

            //-----------------------------------------------------------------
            ClearChilds();
            //-----------------------------------------------------------------
            for (var i = 0; i < dataLength; i++)
            {
                var item = CreateItem(_bigEndian, _encoding);
                item.Write(dataSource, ref startPositionInDataSource);

                AddChild(item);
            }
            //-----------------------------------------------------------------
        }
        public void Read(ITcpTypeData dataTarget, ref int startPositionInDataTarget)
        {
            if (dataTarget == null)
            {
                throw new ArgumentNullException(nameof(dataTarget));
            }
            if (startPositionInDataTarget < 0 || startPositionInDataTarget > dataTarget.Length)
            {
                throw new ArgumentOutOfRangeException(nameof(startPositionInDataTarget));
            }
            if (dataTarget.Length < (startPositionInDataTarget + DataLength))
            {
                throw new ArgumentException(string.Empty, nameof(startPositionInDataTarget));
            }

            //-----------------------------------------------------------------
            var length = CreateHeader(_headerBigEndian, _valueBytes.Count);

            length.Read(dataTarget, ref startPositionInDataTarget);
            var dataLength = GetHeaderValue(length);

            //-----------------------------------------------------------------
            if (_valueBytes.Count < dataLength)
            {
                throw new InvalidOperationException();
            }

            //-----------------------------------------------------------------
            for (var i = 0; i < dataLength; i++)
            {
                dataTarget[startPositionInDataTarget + i] = _valueBytes[i];
            }
            //-----------------------------------------------------------------
            startPositionInDataTarget += dataLength;
        }
示例#6
0
            //-----------------------------------------------------------------
            public static ReceivedResult CreateDataResult(ITcpTypeData data)
            {
                if (data == null)
                {
                    throw new ArgumentNullException(nameof(data));
                }

                return(new ReceivedResult(ReceivedDataType.Data, data, null));
            }
        public virtual void Write(ITcpTypeData dataSource, ref int startPositionInDataSource)
        {
            if (dataSource == null)
            {
                throw new ArgumentNullException(nameof(dataSource));
            }
            if (startPositionInDataSource < 0 || startPositionInDataSource > dataSource.Length)
            {
                throw new ArgumentOutOfRangeException(nameof(startPositionInDataSource));
            }

            //-----------------------------------------------------------------
            foreach (var child in _childs)
            {
                child.Write(dataSource, ref startPositionInDataSource);
            }
            //-----------------------------------------------------------------
        }
示例#8
0
        public void Read(ITcpTypeData dataTarget, ref int startPositionInDataTarget)
        {
            if (dataTarget == null)
            {
                throw new ArgumentNullException(nameof(dataTarget));
            }
            if (startPositionInDataTarget < 0 || startPositionInDataTarget > dataTarget.Length)
            {
                throw new ArgumentOutOfRangeException(nameof(startPositionInDataTarget));
            }
            if (dataTarget.Length < (startPositionInDataTarget + DataLength))
            {
                throw new ArgumentException(string.Empty, nameof(startPositionInDataTarget));
            }

            //-----------------------------------------------------------------
            _enumContent.Read(dataTarget, ref startPositionInDataTarget);
            //-----------------------------------------------------------------
        }
示例#9
0
        public void Write(ITcpTypeData dataSource, ref int startPositionInDataSource)
        {
            if (dataSource == null)
            {
                throw new ArgumentNullException(nameof(dataSource));
            }
            if (startPositionInDataSource < 0 || startPositionInDataSource > dataSource.Length)
            {
                throw new ArgumentOutOfRangeException(nameof(startPositionInDataSource));
            }
            if (dataSource.Length < (startPositionInDataSource + DataLength))
            {
                throw new ArgumentException(string.Empty, nameof(startPositionInDataSource));
            }

            //-----------------------------------------------------------------
            _content.Write(dataSource, ref startPositionInDataSource);
            //-----------------------------------------------------------------
        }
示例#10
0
        public void Write(ITcpTypeData dataSource, ref int startPositionInDataSource)
        {
            if (dataSource == null)
            {
                throw new ArgumentNullException(nameof(dataSource));
            }
            if (startPositionInDataSource < 0 || startPositionInDataSource > dataSource.Length)
            {
                throw new ArgumentOutOfRangeException(nameof(startPositionInDataSource));
            }
            if (dataSource.Length < (startPositionInDataSource + DataLength))
            {
                throw new ArgumentException(string.Empty, nameof(startPositionInDataSource));
            }

            //-----------------------------------------------------------------
            _value = (byte)(dataSource[startPositionInDataSource] != 0 ? 1 : 0);
            //-----------------------------------------------------------------
            startPositionInDataSource += DataLength;
        }
示例#11
0
        public void Write(ITcpTypeData dataSource, ref int startPositionInDataSource)
        {
            if (dataSource == null)
            {
                throw new ArgumentNullException(nameof(dataSource));
            }
            if (startPositionInDataSource < 0 || startPositionInDataSource > dataSource.Length)
            {
                throw new ArgumentOutOfRangeException(nameof(startPositionInDataSource));
            }

            //-----------------------------------------------------------------
            _hasValue.Write(dataSource, ref startPositionInDataSource);

            if (HasValue)
            {
                _value.Write(dataSource, ref startPositionInDataSource);
            }
            //-----------------------------------------------------------------
        }
        //---------------------------------------------------------------------
        public virtual void ContinueWrite(ITcpTypeData dataSource, ref int startPositionInDataSource)
        {
            if (dataSource == null)
            {
                throw new ArgumentNullException(nameof(dataSource));
            }
            if (startPositionInDataSource < 0 || startPositionInDataSource > dataSource.Length)
            {
                throw new ArgumentOutOfRangeException(nameof(startPositionInDataSource));
            }

            var isContinueWrite        = false;
            var writedChildsDataLength = 0;

            for (var i = 0; i < _childs.Count; i++)
            {
                var child = _childs[i];

                if (isContinueWrite)
                {
                    child.Write(dataSource, ref startPositionInDataSource);
                }
                else
                {
                    writedChildsDataLength += child.DataLength;
                    if (writedChildsDataLength < startPositionInDataSource)
                    {
                        continue;
                    }

                    isContinueWrite = true;

                    //Если startPositionInDataSource == 0 или startPositionInDataSource не синхронизирован с началом данных в composite.
                    if (writedChildsDataLength > startPositionInDataSource)
                    {
                        --i;
                    }
                }
            }
        }
        public virtual void Read(ITcpTypeData dataTarget, ref int startPositionInDataTarget)
        {
            if (dataTarget == null)
            {
                throw new ArgumentNullException(nameof(dataTarget));
            }
            if (startPositionInDataTarget < 0 || startPositionInDataTarget > dataTarget.Length)
            {
                throw new ArgumentOutOfRangeException(nameof(startPositionInDataTarget));
            }
            if (dataTarget.Length < (startPositionInDataTarget + DataLength))
            {
                throw new ArgumentException(string.Empty, nameof(startPositionInDataTarget));
            }

            //-----------------------------------------------------------------
            foreach (var child in _childs)
            {
                child.Read(dataTarget, ref startPositionInDataTarget);
            }
            //-----------------------------------------------------------------
        }
示例#14
0
        public void CopyTo(ITcpTypeData dataTarget, int startPositionInDataTarger)
        {
            if (dataTarget == null)
            {
                throw new ArgumentNullException(nameof(dataTarget));
            }
            if (startPositionInDataTarger < 0 || startPositionInDataTarger > dataTarget.Length)
            {
                throw new ArgumentOutOfRangeException(nameof(startPositionInDataTarger));
            }
            if (dataTarget.Length < (startPositionInDataTarger + Length))
            {
                throw new ArgumentException(string.Empty, nameof(startPositionInDataTarger));
            }

            //-----------------------------------------------------------------
            for (var i = 0; i < Length; i++)
            {
                dataTarget[startPositionInDataTarger + i] = _bytes[i];
            }
            //-----------------------------------------------------------------
        }
示例#15
0
        public override void Read(ITcpTypeData dataTarget, ref int startPositionInDataTarget)
        {
            if (dataTarget == null)
            {
                throw new ArgumentNullException(nameof(dataTarget));
            }
            if (startPositionInDataTarget < 0 || startPositionInDataTarget > dataTarget.Length)
            {
                throw new ArgumentOutOfRangeException(nameof(startPositionInDataTarget));
            }
            if (dataTarget.Length < (startPositionInDataTarget + DataLength))
            {
                throw new ArgumentException(string.Empty, nameof(startPositionInDataTarget));
            }

            //-----------------------------------------------------------------
            var count = CreateCount(_bigEndian);

            TcpConvert.ToValueTcpType(count, GetCount);
            count.Read(dataTarget, ref startPositionInDataTarget);
            //-----------------------------------------------------------------
            base.Read(dataTarget, ref startPositionInDataTarget);
        }
示例#16
0
 //---------------------------------------------------------------------
 public override void ContinueWrite(ITcpTypeData dataSource, ref int startPositionInDataSource)
 {
     Write(dataSource, ref startPositionInDataSource);
 }
示例#17
0
 private ReceivedResult(ReceivedDataType type, ITcpTypeData data, Exception exception)
 {
     _type      = type;
     _data      = data;
     _exception = exception;
 }