Exemple #1
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.");
        }
Exemple #2
0
        static void Main(string[] args)
        {
            PlayerComparer plyCmp = new PlayerComparer();
            var            pv1    = new my.game.PlayerV1();

            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.ZeroCopyBuffer(bytes);
            Int32 buf_len = 0;

            // serialize
            buf_len = pv1.SizeOf();
            pv1.Write(stream);

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

            // deserialize
            pv1_other.Read(stream);
            stream.Clear();

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

            // forward compat (old data, new struct)
            pv2.Read(stream);

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

            stream.Clear();
            pv1 = new my.game.PlayerV1();

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

            pv2.Write(stream);

            pv1.Read(stream);

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

            Console.WriteLine("done.");
        }