示例#1
0
        public override void SetData(byte[] data, int startIndex, int len)
        {
            CheckData(data, startIndex, len);
            Array.Copy(data, startIndex, InsideData, 0, 3);
            int addrValueIndex = startIndex + 3;

            // 初始化中继地址列表
            if (RouteAddrList == null)
            {
                RouteAddrList = new List <NetAddr>();
            }
            RouteAddrList.Clear();

            for (int i = 0; i < RouteNodeNum; i++)
            {
                // 获取第i个中继地址模式
                var emLen = (EmAddrLen)InsideData.GetBits(10 + 2 * i, 2);

                NetAddr addr = new NetAddr()
                {
                    AddrMode = emLen
                };
                int addrLen = emLen == EmAddrLen.Two ? 2 : 6;
                addr.Value = new byte[addrLen];
                if (addrValueIndex + addrLen > len)
                {
                    throw new ArgumentOutOfRangeException("len", "len的长度不够");
                }
                addr.SetData(data, addrValueIndex, addrLen);
                addrValueIndex += addrLen;
                RouteAddrList.Add(addr);
            }
        }
示例#2
0
 /// <summary>
 /// 中继列表地址模式变动后 更新中继列表
 /// </summary>
 private void UpdateAddrList()
 {
     RouteAddrList.Clear();
     for (int i = 0; i < RouteNodeNum; i++)
     {
         // 获取第i个中继地址模式
         var     emLen = (EmAddrLen)InsideData.GetBits(10 + 2 * i, 2);
         NetAddr addr  = new NetAddr();
         addr.AddrMode = emLen;
         RouteAddrList.Add(addr);
     }
 }
示例#3
0
        /// <summary>
        /// 添加中继地址 自动设置 中继列表地址模式、中继索引、中继节点数
        /// </summary>
        /// <param name="addr"></param>
        public void Add(NetAddr addr)
        {
            if (addr == null)
            {
                throw new ArgumentNullException("addr", "addr不能为空");
            }
            if (RouteNodeNum > 6)
            {
                throw new Exception("中继地址已经超过了6个 不能再添加");
            }
            var mode = addr.AddrMode;

            InsideData.SetBits(10 + 2 * RouteNodeNum, 2, (byte)mode);
            RouteNodeNum++;
            RouteIndex++;
            RouteAddrList.Add(addr);
        }
示例#4
0
 public override T[] GetData()
 {
     return(InsideData.Reverse().ToArray());
 }