Esempio n. 1
0
        public bool Equals(my.game.player_v1 lhs, my.game.player_v2 rhs)
        {
            if (Object.ReferenceEquals(lhs, rhs))
            {
                return(true);
            }

            if (Object.ReferenceEquals(lhs, null) || Object.ReferenceEquals(rhs, null))
            {
                return(false);
            }

            return
                (lhs.id == rhs.id &&
                 lhs.name == rhs.name &&
                 vec3Cmp.Equals(lhs.pos, rhs.pos) &&
                 lhs.inventory.SequenceEqual(rhs.inventory, itemCmp) &&
                 lhs.quests.SequenceEqual(rhs.quests, questCmp)
                );
        }
Esempio n. 2
0
        static void Main(string[] args)
        {
            PlayerComparer plyCmp = new PlayerComparer();
            var            pv1    = new my.game.player_v1();

            pv1.id     = 1;
            pv1.age    = 22;
            pv1.factor = 2.0f;
            pv1.name   = "pv1";

            var itm = new my.game.item();

            itm.id    = 11;
            itm.level = 321110;
            itm.type  = 3;
            pv1.inventory.Add(itm);
            itm    = new my.game.item();
            itm.id = 12;
            pv1.inventory.Add(itm);

            var qst = new my.game.quest();

            qst.id          = 50;
            qst.name        = "quest1";
            qst.description = "There are something unusual...";
            pv1.quests.Add(qst);

            var   bytes   = new byte[4096];
            var   stream  = new adata.zero_copy_buffer(bytes);
            Int32 buf_len = 0;

            // serialize
            buf_len = my.game.player_stream.size_of(pv1);
            my.game.player_stream.write(stream, pv1);
            Debug.Assert(!stream.error(), stream.get_error_msg());

            var pv1_other = new my.game.player_v1();

            // deserialize
            my.game.player_stream.read(stream, ref pv1_other);
            Debug.Assert(!stream.error(), stream.get_error_msg());
            Debug.Assert(plyCmp.Equals(pv1, pv1_other));

            stream.clear();

            var pv2 = new my.game.player_v2();

            // forward compat (old data, new struct)
            my.game.player_stream.read(stream, ref pv2);
            Debug.Assert(!stream.error(), stream.get_error_msg());

            Debug.Assert(plyCmp.Equals(pv1, pv2));

            stream.clear();
            pv1 = new my.game.player_v1();

            // backward compat (new data, old struct)
            pv2.id   = 6543;
            pv2.name = "pv2";
            pv2.friends.Add(2);
            pv2.friends.Add(100);
            buf_len = my.game.player_stream.size_of(pv2);

            my.game.player_stream.write(stream, pv2);
            Debug.Assert(!stream.error(), stream.get_error_msg());

            my.game.player_stream.read(stream, ref pv1);
            Debug.Assert(!stream.error(), stream.get_error_msg());

            Debug.Assert(plyCmp.Equals(pv1, pv2));

            Console.WriteLine("done.");
        }