예제 #1
0
        public static XElement ToXml(this ValueMapItem item)
        {
            var elem = new XElement(
                EventManifestSchema.Namespace + "map",
                new XAttribute("value", item.Value));

            if (item.Symbol != null)
            {
                elem.Add(new XAttribute("symbol", item.Symbol));
            }
            AddOptionalMessage(elem, item.Message);
            return(elem);
        }
예제 #2
0
        public void ValueMapItem()
        {
            // Constructor (empty).
            {
                var o = new ValueMapItem <int>();

                Assert.AreEqual(default(int), o.Value);
                Assert.AreEqual(default(RequestParam), o.Param);
                Assert.AreEqual(default(ValueMapItemType), o.Type);
            }

            // Constructor (with params).
            {
                var expectedValue = 7;
                var expectedType  = ValueMapItemType.Int;
                var expectedParam = RequestParam.BuySell;

                var o = new ValueMapItem <int>(expectedType, expectedParam, expectedValue);

                Assert.AreEqual(expectedValue, o.Value);
                Assert.AreEqual(expectedParam, o.Param);
                Assert.AreEqual(expectedType, o.Type);
            }
        }
예제 #3
0
        private Tuple <Map, MapEntry> ReadMap(BinaryReader r)
        {
            long offset = r.BaseStream.Position;

            uint magic = r.ReadUInt32();

            if (magic != CrimsonTags.VMAP && magic != CrimsonTags.BMAP)
            {
                throw new InternalException("Unknown map magic {0}", magic);
            }

            uint length     = r.ReadUInt32();
            uint nameOffset = r.ReadUInt32();
            uint flags      = r.ReadUInt32();
            uint count      = r.ReadUInt32();

            var itemEntries = new List <MapItemEntry>();

            for (uint i = 0; i < count; ++i)
            {
                var value     = r.ReadUInt32();
                var messageId = r.ReadUInt32();
                itemEntries.Add(new MapItemEntry {
                    Value = value, MessageId = messageId
                });
            }

            if (r.BaseStream.Position != offset + length)
            {
                throw new IOException();
            }

            string name     = r.ReadCountedStringAt(nameOffset);
            var    mapEntry = new MapEntry {
                Flags = (MapFlags)flags,
                Name  = name,
                Items = itemEntries
            };
            var map = magic == CrimsonTags.VMAP ? new ValueMap(name) : (Map) new BitMap(name);

            foreach (var itemEntry in itemEntries)
            {
                var value = Located.Create(itemEntry.Value);
                var ls    = ResolveMessage(itemEntry.MessageId);

                MapItem item;
                if (magic == CrimsonTags.VMAP)
                {
                    item = new ValueMapItem(
                        (ValueMap)map, value, ls);
                }
                else
                {
                    item = new BitMapItem((BitMap)map, value, ls);
                }
                map.Items.Add(item);
            }

            MarkObject(offset, map);

            return(Tuple.Create(map, mapEntry));
        }