コード例 #1
0
ファイル: Maybe.cs プロジェクト: nhatquangsin/steit
            public void ReplaceAt(UInt32 tag, WireType wireType, IReader reader, bool shouldNotify)
            {
                switch (tag)
                {
                case 0: this.F0 = this.MaybeNotify(0, StateFactory.Deserialize <T>(reader, this.Path, 0), this.F0, OnF0Update, shouldNotify); break;

                default: reader.SkipField(wireType); break;
                }
            }
コード例 #2
0
ファイル: StateList.cs プロジェクト: trungfinity/steit
        public void ReplayListPush(IReader reader)
        {
            var tag  = (UInt32)this.Count;
            var item = StateFactory.Deserialize <T>(reader, this.Path, tag);

            var args = new ListPushEventArgs <T, StateList <T> >(tag, item, this);

            this.OnPush?.Invoke(this, args);

            this.Items.Add(item);
        }
コード例 #3
0
ファイル: StateList.cs プロジェクト: trungfinity/steit
        public void ReplaceAt(UInt32 tag, WireType wireType, IReader reader, bool shouldNotify)
        {
            if (tag >= this.Count)
            {
                throw new IndexOutOfRangeException();
            }

            var newItem = StateFactory.Deserialize <T>(reader, this.Path, tag);
            var oldItem = this[(int)tag];

            if (shouldNotify)
            {
                var args = new FieldUpdateEventArgs <T, StateList <T> >(tag, newItem, oldItem, this);
                this.OnUpdate?.Invoke(this, args);
            }

            this.Items[(int)tag] = newItem;
        }
コード例 #4
0
ファイル: StateMap.cs プロジェクト: trungfinity/steit
        public void ReplaceAt(UInt32 tag, WireType wireType, IReader reader, bool shouldNotify)
        {
            var newValue = StateFactory.Deserialize <T>(reader, this.Path, tag);

            if (shouldNotify)
            {
                if (this.ContainsKey(tag))
                {
                    var oldValue = this[tag];
                    var args     = new FieldUpdateEventArgs <T, StateMap <T> >(tag, newValue, oldValue, this);
                    this.OnUpdate?.Invoke(this, args);
                }
                else
                {
                    var args = new MapInsertEventArgs <T, StateMap <T> >(tag, newValue, this);
                    this.OnInsert?.Invoke(this, args);
                }
            }

            this.Dictionary[tag] = newValue;
        }
コード例 #5
0
        public static void Main(string[] args)
        {
            var hello = Hello.Deserialize(new ByteReader(new byte[] {
                // Numbers: 1, 2, 1337.
                2, 4, 2, 4, 242, 20,
                // Others: -1, -2, 1337.
                10, 4, 1, 3, 242, 20,
            }));

            Console.WriteLine("Numbers: {0}", String.Join(", ", hello.Numbers));
            Console.WriteLine("Others: {0}", String.Join(", ", hello.Others));

            Outer.OnFooUpdate += (sender, e) => {
                Console.WriteLine("Outer / Foo: {0} => {1}", e.OldValue, e.NewValue);
            };

            Outer.OnBarUpdate += (sender, e) => {
                Console.WriteLine("Outer / Bar: {0} => {1}", e.OldValue, e.NewValue);
            };

            Outer.OnInnerUpdate += (sender, e) => {
                Console.WriteLine("Outer / Inner: {0} => {1}", InnerToString(e.OldValue), InnerToString(e.NewValue));
            };

            Inner.OnFooUpdate += (sender, e) => {
                Console.WriteLine("Outer / Inner / Foo: {0} => {1}", e.OldValue, e.NewValue);
            };

            Inner.OnBarUpdate += (sender, e) => {
                Console.WriteLine("Outer / Inner / Bar: {0} => {1}", e.OldValue, e.NewValue);
            };

            var outer = new Outer();

            StateReplayer.Replay <Outer>(ref outer, new ByteReader(new byte[] {
                8, 0, 2, 1, 0, 10, 2, 254, 1,
                7, 0, 2, 1, 1, 10, 1, 1,
                10, 0, 2, 1, 2, 10, 4, 0, 44, 8, 1,
                9, 0, 2, 2, 2, 0, 10, 2, 192, 2,
                4, 0, 2, 1, 2,
                1, 0,
            }));

            Console.WriteLine("{0} {1} {2}", outer.Foo, outer.Bar, InnerToString(outer.Inner));

            Multicase.OnUpdate += (sender, e) => {
                Console.WriteLine("Multicase: variant {0} ({1}) => variant {2} ({3}", e.OldTag, e.OldVariant, e.NewTag, e.NewVariant);
            };

            Multicase.FirstCase.OnCounterUpdate += (sender, e) => {
                Console.WriteLine("Multicase / FirstCase / Counter: {0} => {1}", e.OldValue, e.NewValue);
            };

            Multicase.FirstCase.OnEnabledUpdate += (sender, e) => {
                Console.WriteLine("Multicase / FirstCase / Enabled: {0} => {1}", e.OldValue, e.NewValue);
            };

            Multicase.SecondCase.OnCounterUpdate += (sender, e) => {
                Console.WriteLine("Multicase / SecondCase / Counter: {0} => {1}", e.OldValue, e.NewValue);
            };

            Multicase.SecondCase.OnEnabledUpdate += (sender, e) => {
                Console.WriteLine("Multicase / SecondCase / Enabled: {0} => {1}", e.OldValue, e.NewValue);
            };

            var multicase = new Multicase();

            StateReplayer.Replay <Multicase>(ref multicase, new ByteReader(new byte[] {
                4, 0, 10, 1, 1,
                9, 0, 2, 2, 1, 0, 10, 2, 136, 1,
            }));

            var list1 = new StateList <Inner>();

            list1.OnUpdate += (sender, e) => {
                Console.WriteLine("StateList<Inner>, update #{0}: {1} => {2}", e.Tag, InnerToString(e.OldValue), InnerToString(e.NewValue));
            };

            list1.OnPush += (sender, e) => {
                Console.WriteLine("StateList<Inner>, add #{0}: {1}", e.Tag, InnerToString(e.Item));
            };

            list1.OnPop += (sender, e) => {
                Console.WriteLine("StateList<Inner>, remove #{0}: {1}", e.Tag, InnerToString(e.Item));
            };

            StateReplayer.Replay <StateList <Inner> >(ref list1, new ByteReader(new byte[] {
                5, 8, 10, 2, 0, 12,
                8, 8, 10, 5, 0, 154, 1, 8, 1,
                1, 8,
                9, 0, 2, 2, 1, 0, 10, 2, 136, 1,
                1, 9,
                4, 0, 2, 1, 0,
                4, 0, 2, 1, 1,
            }));

            var list2 = new StateList <SByte>();

            list2.OnUpdate += (sender, e) => {
                Console.WriteLine("StateList<SByte>, update #{0}: {1} => {2}", e.Tag, e.OldValue, e.NewValue);
            };

            list2.OnPush += (sender, e) => {
                Console.WriteLine("StateList<SByte>, add #{0}: {1}", e.Tag, e.Item);
            };

            list2.OnPop += (sender, e) => {
                Console.WriteLine("StateList<SByte>, remove #{0}: {1}", e.Tag, e.Item);
            };

            StateReplayer.Replay <StateList <SByte> >(ref list2, new ByteReader(new byte[] {
                4, 8, 10, 1, 20,
                4, 8, 10, 1, 22,
                4, 8, 10, 1, 0,
                1, 9,
                7, 0, 2, 1, 1, 10, 1, 0,
            }));

            var map1 = new StateMap <Inner>();

            map1.OnUpdate += (sender, e) => {
                Console.WriteLine("StateMap<Inner>, update #{0}: {1} => {2}", e.Tag, InnerToString(e.OldValue), InnerToString(e.NewValue));
            };

            map1.OnInsert += (sender, e) => {
                Console.WriteLine("StateMap<Inner>, insert #{0}: {1}", e.Tag, InnerToString(e.Value));
            };

            map1.OnRemove += (sender, e) => {
                Console.WriteLine("StateMap<Inner>, remove #{0}: {1}", e.Tag, InnerToString(e.Value));
            };

            StateReplayer.Replay <StateMap <Inner> >(ref map1, new ByteReader(new byte[] {
                8, 0, 2, 1, 5, 10, 2, 0, 12,
                11, 0, 2, 1, 1, 10, 5, 0, 154, 1, 8, 1,
                4, 0, 2, 1, 0,
                10, 0, 2, 1, 0, 10, 4, 0, 84, 8, 1,
                9, 0, 2, 2, 1, 0, 10, 2, 136, 1,
                3, 12, 8, 0,
            }));

            var map2 = new StateMap <SByte>();

            map2.OnUpdate += (sender, e) => {
                Console.WriteLine("StateMap<SByte>, update #{0}: {1} => {2}", e.Tag, e.OldValue, e.NewValue);
            };

            map2.OnInsert += (sender, e) => {
                Console.WriteLine("StateMap<SByte>, insert #{0}: {1}", e.Tag, e.Value);
            };

            map2.OnRemove += (sender, e) => {
                Console.WriteLine("StateMap<SByte>, remove #{0}: {1}", e.Tag, e.Value);
            };

            StateReplayer.Replay <StateMap <SByte> >(ref map2, new ByteReader(new byte[] {
                7, 0, 2, 1, 1, 10, 1, 20,
                7, 0, 2, 1, 3, 10, 1, 22,
                7, 0, 2, 1, 7, 10, 1, 0,
                7, 0, 2, 1, 7, 10, 1, 1,
                3, 12, 8, 1,
            }));

            OldAction.OnUpdate += (sender, e) => {
                Console.WriteLine("Action: variant {0} ({1}) => variant {2} ({3}", e.OldTag, e.OldVariant, e.NewTag, e.NewVariant);
            };

            OldAction.Attack.OnAttackerUpdate += (sender, e) => {
                Console.WriteLine("Action / Attack / Attacker: {0} => {1}", e.OldValue, e.NewValue);
            };

            OldAction.Attack.OnDefenderUpdate += (sender, e) => {
                Console.WriteLine("Action / Attack / Defender: {0} => {1}", e.OldValue, e.NewValue);
            };

            OldAction.Attack.OnHitsUpdate += (sender, e) => {
                Console.WriteLine("Action / Attack / Hits:");

                if (e.OldValue.Count > 0)
                {
                    Console.WriteLine("Old Hits:");
                    foreach (var hit in e.OldValue)
                    {
                        Console.WriteLine(HitToString(hit));
                    }
                }
                else
                {
                    Console.WriteLine("Old Hits:\n<empty>");
                }

                if (e.NewValue.Count > 0)
                {
                    Console.WriteLine("New Hits:");
                    foreach (var hit in e.NewValue)
                    {
                        Console.WriteLine(HitToString(hit));
                    }
                }
                else
                {
                    Console.WriteLine("New Hits:\n<empty>");
                }
            };

            var action = new OldAction();

            StateReplayer.Replay <OldAction>(ref action, new ByteReader(new byte[] {
                // Set variant from `OldAction::Raw` to `OldAction::Attack`.
                4, 0, 10, 1, 1,
                // Set attacker to 1.
                8, 0, 2, 2, 1, 0, 10, 1, 1,
                // Set defender to 2.
                8, 0, 2, 2, 1, 1, 10, 1, 2,
                // Add 4 hits with dummy values from 6 to 9, inclusive.
                79, 0, 2, 2, 1, 2, 10, 72,
                17, 2, 1, 0, 10, 1, 0, 18, 1, 0, 26, 1, 0, 34, 1, 0, 40, 12,
                17, 2, 1, 0, 10, 1, 0, 18, 1, 0, 26, 1, 0, 34, 1, 0, 40, 14,
                17, 2, 1, 0, 10, 1, 0, 18, 1, 0, 26, 1, 0, 34, 1, 0, 40, 16,
                17, 2, 1, 0, 10, 1, 0, 18, 1, 0, 26, 1, 0, 34, 1, 0, 40, 18,
            }));

            Console.WriteLine("{0}", StateFactory.Deserialize <String>(new ByteReader(new byte[] { 2, 51, 51 })));
            Console.WriteLine("{0}", StateFactory.Deserialize <String>(new ByteReader(new byte[] { 2, 207, 128 })));

            Console.WriteLine("{0}", Option <Int16> .Deserialize(new ByteReader(new byte[] { })));
            Console.WriteLine("{0}", Option <Int16> .Deserialize(new ByteReader(new byte[] { 242, 20 })));
        }