コード例 #1
0
        public static void write(adata.zero_copy_buffer stream, vec3 value)
        {
            UInt64 tag = 7;

            adata.stream.write(stream, tag);
            if (stream.error())
            {
                return;
            }
            adata.stream.write(stream, size_of(value));
            if (stream.error())
            {
                return;
            }
            { adata.stream.write(stream, value.x); { if (stream.error())
                                                     {
                                                         stream.trace_error("x", -1); return;
                                                     }
              } }
            { adata.stream.write(stream, value.y); { if (stream.error())
                                                     {
                                                         stream.trace_error("y", -1); return;
                                                     }
              } }
            { adata.stream.write(stream, value.z); { if (stream.error())
                                                     {
                                                         stream.trace_error("z", -1); return;
                                                     }
              } }
            return;
        }
コード例 #2
0
        public static void write(adata.zero_copy_buffer stream, item value)
        {
            UInt64 tag = 7;

            adata.stream.write(stream, tag);
            if (stream.error())
            {
                return;
            }
            adata.stream.write(stream, size_of(value));
            if (stream.error())
            {
                return;
            }
            { adata.stream.write(stream, value.id); { if (stream.error())
                                                      {
                                                          stream.trace_error("id", -1); return;
                                                      }
              } }
            { adata.stream.write(stream, value.type); { if (stream.error())
                                                        {
                                                            stream.trace_error("type", -1); return;
                                                        }
              } }
            { adata.stream.write(stream, value.level); { if (stream.error())
                                                         {
                                                             stream.trace_error("level", -1); return;
                                                         }
              } }
            return;
        }
コード例 #3
0
        public static void skip_read(adata.zero_copy_buffer stream, ref vec3 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)
            {
                float dummy_value = 0; adata.stream.skip_read(stream, ref dummy_value); { if (stream.error())
                                                                                          {
                                                                                              stream.trace_error("x", -1); return;
                                                                                          }
                }
            }
            if ((tag & 2) > 0)
            {
                float dummy_value = 0; adata.stream.skip_read(stream, ref dummy_value); { if (stream.error())
                                                                                          {
                                                                                              stream.trace_error("y", -1); return;
                                                                                          }
                }
            }
            if ((tag & 4) > 0)
            {
                float dummy_value = 0; adata.stream.skip_read(stream, ref dummy_value); { if (stream.error())
                                                                                          {
                                                                                              stream.trace_error("z", -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);
                }
            }
        }
コード例 #4
0
        public static void read(adata.zero_copy_buffer stream, ref item 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)
            {
                adata.stream.read(stream, ref value.type); { if (stream.error())
                                                             {
                                                                 stream.trace_error("type", -1); return;
                                                             }
                }
            }
            if ((tag & 4) > 0)
            {
                adata.stream.read(stream, ref value.level); { if (stream.error())
                                                              {
                                                                  stream.trace_error("level", -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);
                }
            }
        }
コード例 #5
0
        public static void write(adata.zero_copy_buffer stream, quest value)
        {
            UInt64 tag = 1;

            if (value.name.Length > 0)
            {
                tag |= 2;
            }
            if (value.description.Length > 0)
            {
                tag |= 4;
            }
            adata.stream.write(stream, tag);
            if (stream.error())
            {
                return;
            }
            adata.stream.write(stream, size_of(value));
            if (stream.error())
            {
                return;
            }
            { adata.stream.write(stream, value.id); { if (stream.error())
                                                      {
                                                          stream.trace_error("id", -1); return;
                                                      }
              } }
            if ((tag & 2) > 0)
            {
                UInt32 len3 = (UInt32)value.name.Length;
                adata.stream.write(stream, len3);
                adata.stream.write(stream, value.name, len3);
                { if (stream.error())
                  {
                      stream.trace_error("name", -1); return;
                  }
                }
            }
            if ((tag & 4) > 0)
            {
                UInt32 len3 = (UInt32)value.description.Length;
                adata.stream.write(stream, len3);
                adata.stream.write(stream, value.description, len3);
                { if (stream.error())
                  {
                      stream.trace_error("description", -1); return;
                  }
                }
            }
            return;
        }
コード例 #6
0
        public static void skip_read(adata.zero_copy_buffer stream, ref quest 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);
                { 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)
            {
                UInt32 len3 = adata.stream.check_read_size(stream);
                { if (stream.error())
                  {
                      stream.trace_error("description", -1); return;
                  }
                }
                stream.skip_read(len3);
                { if (stream.error())
                  {
                      stream.trace_error("description", -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);
                }
            }
        }
コード例 #7
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.");
        }
コード例 #8
0
        public static void write(adata.zero_copy_buffer stream, player_v2 value)
        {
            UInt64 tag = 9;

            if (value.name.Length > 0)
            {
                tag |= 2;
            }
            if (value.inventory.Count > 0)
            {
                tag |= 16;
            }
            if (value.quests.Count > 0)
            {
                tag |= 32;
            }
            if (value.friends.Count > 0)
            {
                tag |= 128;
            }
            adata.stream.write(stream, tag);
            if (stream.error())
            {
                return;
            }
            adata.stream.write(stream, size_of(value));
            if (stream.error())
            {
                return;
            }
            { adata.stream.write(stream, value.id); { if (stream.error())
                                                      {
                                                          stream.trace_error("id", -1); return;
                                                      }
              } }
            if ((tag & 2) > 0)
            {
                UInt32 len3 = (UInt32)value.name.Length;
                adata.stream.write(stream, len3);
                adata.stream.write(stream, value.name, len3);
                { if (stream.error())
                  {
                      stream.trace_error("name", -1); return;
                  }
                }
            }
            //value.age deleted , skip write.
            { util.vec3_stream.write(stream, value.pos); { if (stream.error())
                                                           {
                                                               stream.trace_error("pos", -1); return;
                                                           }
              } }
            if ((tag & 16) > 0)
            {
                UInt32 len3 = (UInt32)value.inventory.Count;
                adata.stream.write(stream, len3);
                int count = 0;
                foreach (item i in value.inventory)
                {
                    { write(stream, i); }
                    { if (stream.error())
                      {
                          stream.trace_error("inventory", count); return;
                      }
                    }
                    ++count;
                }
            }
            if ((tag & 32) > 0)
            {
                UInt32 len3 = (UInt32)value.quests.Count;
                adata.stream.write(stream, len3);
                int count = 0;
                foreach (my.game.quest i in value.quests)
                {
                    { my.game.quest_stream.write(stream, i); }
                    { if (stream.error())
                      {
                          stream.trace_error("quests", count); return;
                      }
                    }
                    ++count;
                }
            }
            //value.factor deleted , skip write.
            if ((tag & 128) > 0)
            {
                UInt32 len3 = (UInt32)value.friends.Count;
                adata.stream.write(stream, len3);
                int count = 0;
                foreach (Int32 i in value.friends)
                {
                    { adata.stream.write(stream, i); }
                    { if (stream.error())
                      {
                          stream.trace_error("friends", count); return;
                      }
                    }
                    ++count;
                }
            }
            return;
        }
コード例 #9
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);
                }
            }
        }
コード例 #10
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);
                }
            }
        }