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
        public static void read(adata.zero_copy_buffer stream, ref player_v1 value)
        {
            int    offset = stream.read_length();
            UInt64 tag    = 0;

            adata.stream.read(stream, ref tag);
            if (stream.error())
            {
                return;
            }
            Int32 len_tag = 0;

            adata.stream.read(stream, ref len_tag);
            if (stream.error())
            {
                return;
            }

            if ((tag & 1) > 0)
            {
                adata.stream.read(stream, ref value.id); { if (stream.error())
                                                           {
                                                               stream.trace_error("id", -1); return;
                                                           }
                }
            }
            if ((tag & 2) > 0)
            {
                UInt32 len3 = adata.stream.check_read_size(stream, 30);
                { if (stream.error())
                  {
                      stream.trace_error("name", -1); return;
                  }
                }
                adata.stream.read(stream, ref value.name, len3);
                { if (stream.error())
                  {
                      stream.trace_error("name", -1); return;
                  }
                }
            }
            if ((tag & 4) > 0)
            {
                adata.stream.read(stream, ref value.age); { if (stream.error())
                                                            {
                                                                stream.trace_error("age", -1); return;
                                                            }
                }
            }
            if ((tag & 8) > 0)
            {
                util.vec3_stream.read(stream, ref value.pos); { if (stream.error())
                                                                {
                                                                    stream.trace_error("pos", -1); return;
                                                                }
                }
            }
            if ((tag & 16) > 0)
            {
                UInt32 len3 = adata.stream.check_read_size(stream);
                { if (stream.error())
                  {
                      stream.trace_error("inventory", -1); return;
                  }
                }
                for (int i = 0; i < len3; ++i)
                {
                    item element = new item();
                    { read(stream, ref element); }
                    value.inventory.Add(element);
                    { if (stream.error())
                      {
                          stream.trace_error("inventory", (int)i); return;
                      }
                    }
                }
            }
            if ((tag & 32) > 0)
            {
                UInt32 len3 = adata.stream.check_read_size(stream);
                { if (stream.error())
                  {
                      stream.trace_error("quests", -1); return;
                  }
                }
                for (int i = 0; i < len3; ++i)
                {
                    my.game.quest element = new my.game.quest();
                    { my.game.quest_stream.read(stream, ref element); }
                    value.quests.Add(element);
                    { if (stream.error())
                      {
                          stream.trace_error("quests", (int)i); return;
                      }
                    }
                }
            }
            if ((tag & 64) > 0)
            {
                adata.stream.read(stream, ref value.factor); { if (stream.error())
                                                               {
                                                                   stream.trace_error("factor", -1); return;
                                                               }
                }
            }
            if (len_tag >= 0)
            {
                UInt32 read_len = (UInt32)(stream.read_length() - offset);
                UInt32 len      = (UInt32)len_tag;
                if (len > read_len)
                {
                    stream.skip_read(len - read_len);
                }
            }
        }
Exemple #3
0
        public static void skip_read(adata.zero_copy_buffer stream, ref player_v2 value)
        {
            int    offset = stream.read_length();
            UInt64 tag    = 0;

            adata.stream.read(stream, ref tag);
            if (stream.error())
            {
                return;
            }
            Int32 len_tag = 0;

            adata.stream.read(stream, ref len_tag);
            if (stream.error())
            {
                return;
            }

            if ((tag & 1) > 0)
            {
                Int32 dummy_value = 0; adata.stream.skip_read(stream, ref dummy_value); { if (stream.error())
                                                                                          {
                                                                                              stream.trace_error("id", -1); return;
                                                                                          }
                }
            }
            if ((tag & 2) > 0)
            {
                UInt32 len3 = adata.stream.check_read_size(stream, 30);
                { if (stream.error())
                  {
                      stream.trace_error("name", -1); return;
                  }
                }
                stream.skip_read(len3);
                { if (stream.error())
                  {
                      stream.trace_error("name", -1); return;
                  }
                }
            }
            if ((tag & 4) > 0)
            {
                Int32 dummy_value = 0; adata.stream.skip_read(stream, ref dummy_value); { if (stream.error())
                                                                                          {
                                                                                              stream.trace_error("age", -1); return;
                                                                                          }
                }
            }
            if ((tag & 8) > 0)
            {
                util.vec3 dummy_value = null; util.vec3_stream.skip_read(stream, ref dummy_value); { if (stream.error())
                                                                                                     {
                                                                                                         stream.trace_error("pos", -1); return;
                                                                                                     }
                }
            }
            if ((tag & 16) > 0)
            {
                UInt32 len3 = adata.stream.check_read_size(stream);
                { if (stream.error())
                  {
                      stream.trace_error("inventory", -1); return;
                  }
                }
                for (int i = 0; i < len3; ++i)
                {
                    { item dummy_value = null; skip_read(stream, ref dummy_value); }
                    { if (stream.error())
                      {
                          stream.trace_error("inventory", (int)i); return;
                      }
                    }
                }
            }
            if ((tag & 32) > 0)
            {
                UInt32 len3 = adata.stream.check_read_size(stream);
                { if (stream.error())
                  {
                      stream.trace_error("quests", -1); return;
                  }
                }
                for (int i = 0; i < len3; ++i)
                {
                    { my.game.quest dummy_value = null; my.game.quest_stream.skip_read(stream, ref dummy_value); }
                    { if (stream.error())
                      {
                          stream.trace_error("quests", (int)i); return;
                      }
                    }
                }
            }
            if ((tag & 64) > 0)
            {
                float dummy_value = 0; adata.stream.skip_read(stream, ref dummy_value); { if (stream.error())
                                                                                          {
                                                                                              stream.trace_error("factor", -1); return;
                                                                                          }
                }
            }
            if ((tag & 128) > 0)
            {
                UInt32 len3 = adata.stream.check_read_size(stream);
                { if (stream.error())
                  {
                      stream.trace_error("friends", -1); return;
                  }
                }
                for (int i = 0; i < len3; ++i)
                {
                    { Int32 dummy_value = 0; adata.stream.skip_read(stream, ref dummy_value); }
                    { if (stream.error())
                      {
                          stream.trace_error("friends", (int)i); return;
                      }
                    }
                }
            }
            if (len_tag >= 0)
            {
                UInt32 read_len = (UInt32)(stream.read_length() - offset);
                UInt32 len      = (UInt32)len_tag;
                if (len > read_len)
                {
                    stream.skip_read(len - read_len);
                }
            }
        }
Exemple #4
0
            public static void read(adata.zero_copy_buffer stream, ref player_v2 value)
            {
                int offset = stream.read_length();
                  UInt64 tag = 0;
                  adata.stream.read(stream,ref tag);
                  if(stream.error()){return;}
                  Int32 len_tag = 0;
                  adata.stream.read(stream,ref len_tag);
                  if(stream.error()){return;}

                  if((tag&1)>0)      {adata.stream.read(stream,ref value.id);{if(stream.error()){stream.trace_error("id",-1);return;}}}
                  if((tag&2)>0)
                  {
                UInt32 len3 = adata.stream.check_read_size(stream,30);
                {if(stream.error()){stream.trace_error("name",-1);return;}}
                adata.stream.read(stream,ref value.name,len3);
                {if(stream.error()){stream.trace_error("name",-1);return;}}
                  }
                  if((tag&4)>0)      {Int32 dummy_value = 0;adata.stream.skip_read(stream,ref dummy_value);{if(stream.error()){stream.trace_error("age",-1);return;}}}
                  if((tag&8)>0)      {util.vec3_stream.read(stream,ref value.pos);{if(stream.error()){stream.trace_error("pos",-1);return;}}}
                  if((tag&16)>0)
                  {
                UInt32 len3 = adata.stream.check_read_size(stream);
                {if(stream.error()){stream.trace_error("inventory",-1);return;}}
                for (int i = 0 ; i < len3 ; ++i)
                {
                  item element= new item();
                  {read(stream,ref element);}
                  value.inventory.Add(element);
                  {if(stream.error()){stream.trace_error("inventory",(int)i);return;}}
                }
                  }
                  if((tag&32)>0)
                  {
                UInt32 len3 = adata.stream.check_read_size(stream);
                {if(stream.error()){stream.trace_error("quests",-1);return;}}
                for (int i = 0 ; i < len3 ; ++i)
                {
                  my.game.quest element= new my.game.quest();
                  {my.game.quest_stream.read(stream,ref element);}
                  value.quests.Add(element);
                  {if(stream.error()){stream.trace_error("quests",(int)i);return;}}
                }
                  }
                  if((tag&64)>0)      {float dummy_value = 0;adata.stream.skip_read(stream,ref dummy_value);{if(stream.error()){stream.trace_error("factor",-1);return;}}}
                  if((tag&128)>0)
                  {
                UInt32 len3 = adata.stream.check_read_size(stream);
                {if(stream.error()){stream.trace_error("friends",-1);return;}}
                for (int i = 0 ; i < len3 ; ++i)
                {
                  Int32 element= 0;
                  {adata.stream.read(stream,ref element);}
                  value.friends.Add(element);
                  {if(stream.error()){stream.trace_error("friends",(int)i);return;}}
                }
                  }
                  if(len_tag >= 0)
                  {
                UInt32 read_len = (UInt32)(stream.read_length() - offset);
                UInt32 len = (UInt32)len_tag;
                if(len > read_len) stream.skip_read(len - read_len);
                  }
            }