public override void Read()
        {
            var idList = new Structs.IDList {
                ItemIDList = new List <Structs.ItemID>(), TerminalID = 1
            };

            var pos = 0;

            while (pos < BodyLength)
            {
                var itemId = new Structs.ItemID {
                    Size = Stream.ReadStruct <ushort>()
                };

                itemId.Data = new byte[itemId.Size - 2];
                Stream.Read(itemId.Data, 0, itemId.Data.Length);

                idList.ItemIDList.Add(itemId);

                pos += itemId.Size;
            }

            idList.TerminalID = Stream.ReadStruct <ushort>();

            Body = new Structs.VistaAndAboveIdListDataBlock {
                IdList = idList
            };
            if (Body.IdList.TerminalID != 0)
            {
                throw new ExtraDataException("Terminal ID is not 0", nameof(Body.IdList.TerminalID));
            }
        }
示例#2
0
        /// <summary>
        /// Parses the LinkTargetIdList
        /// </summary>
        /// <exception cref="LinkTargetIdListException">Thrown if doesn't get to terminal ID</exception>
        private void ParseLinkTargetIdList()
        {
            LinkTargetIdList = new Structs.LinkTargetIDList
            {
                Size = Stream.ReadStruct <short>(),
                List = new Structs.IDList {
                    ItemIDList = new List <Structs.ItemID>()
                }
            };

            var pos = 0;

            while (pos < LinkTargetIdList.Size - 2)
            {
                var itemId = new Structs.ItemID {
                    Size = Stream.ReadStruct <ushort>()
                };

                itemId.Data = new byte[itemId.Size - 2];
                Stream.Read(itemId.Data, 0, itemId.Data.Length);

                LinkTargetIdList.List.ItemIDList.Add(itemId);

                pos += itemId.Size;
            }

            LinkTargetIdList.List.TerminalID = Stream.ReadStruct <ushort>();

            if (LinkTargetIdList.List.TerminalID != 0)
            {
                throw new LinkTargetIdListException("LinkTargetIdList.TerminalID must be 0",
                                                    nameof(LinkTargetIdList.List.TerminalID));
            }
        }