public void CanCreateNewFlatBufferFromScratch()
        {
            // Second, let's create a FlatBuffer from scratch in C#, and test it also.
            // We use an initial size of 1 to exercise the reallocation algorithm,
            // normally a size larger than the typical FlatBuffer you generate would be
            // better for performance.
            var fbb = new FlatBufferBuilder(1);

            // We set up the same values as monsterdata.json:

            var str = fbb.CreateString("MyMonster");
            var test1 = fbb.CreateString("test1");
            var test2 = fbb.CreateString("test2");

            Monster.StartInventoryVector(fbb, 5);
            for (int i = 4; i >= 0; i--)
            {
                fbb.AddByte((byte)i);
            }
            var inv = fbb.EndVector();

            var fred = fbb.CreateString("Fred");
            Monster.StartMonster(fbb);
            Monster.AddName(fbb, fred);
            var mon2 = Monster.EndMonster(fbb);

            Monster.StartTest4Vector(fbb, 2);
            MyGame.Example.Test.CreateTest(fbb, (short)10, (sbyte)20);
            MyGame.Example.Test.CreateTest(fbb, (short)30, (sbyte)40);
            var test4 = fbb.EndVector();

            Monster.StartTestarrayofstringVector(fbb, 2);
            fbb.AddOffset(test2);
            fbb.AddOffset(test1);
            var testArrayOfString = fbb.EndVector();

            Monster.StartMonster(fbb);
            Monster.AddPos(fbb, Vec3.CreateVec3(fbb, 1.0f, 2.0f, 3.0f, 3.0,
                                                     Color.Green, (short)5, (sbyte)6));
            Monster.AddHp(fbb, (short)80);
            Monster.AddName(fbb, str);
            Monster.AddInventory(fbb, inv);
            Monster.AddTestType(fbb, (byte)1);
            Monster.AddTest(fbb, mon2);
            Monster.AddTest4(fbb, test4);
            Monster.AddTestarrayofstring(fbb, testArrayOfString);
            var mon = Monster.EndMonster(fbb);

            fbb.Finish(mon);

            // Dump to output directory so we can inspect later, if needed
            using (var ms = new MemoryStream(fbb.DataBuffer().Data, fbb.DataBuffer().position(), fbb.Offset()))
            {
                var data = ms.ToArray();
                File.WriteAllBytes(@"Resources/monsterdata_cstest.mon",data);
            }

            // Now assert the buffer
            TestBuffer(fbb.DataBuffer());
        }
 public void TestVector_1xUInt8()
 {
     var builder = new FlatBufferBuilder(1);
     builder.StartVector(sizeof(byte), 1, 1);
     Assert.ArrayEqual(new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, builder.DataBuffer.Data);
     builder.AddByte(1);
     Assert.ArrayEqual(new byte[] { 0, 0, 0, 0, 1, 0, 0, 0 }, builder.DataBuffer.Data);
     builder.EndVector();
     Assert.ArrayEqual(new byte[] { 1, 0, 0, 0, 1, 0, 0, 0 }, builder.DataBuffer.Data);
 }
Exemple #3
0
 public static VectorOffset CreateContextVectorBlock(FlatBufferBuilder builder, Offset <Model>[] data)
 {
     builder.StartVector(4, data.Length, 4); builder.Add(data); return(builder.EndVector());
 }
Exemple #4
0
 public static VectorOffset CreatePlayersVectorBlock(FlatBufferBuilder builder, Offset <PlayerInitInfoS>[] data)
 {
     builder.StartVector(4, data.Length, 4); builder.Add(data); return(builder.EndVector());
 }
Exemple #5
0
 public static VectorOffset CreateMetadataVectorBlock(FlatBufferBuilder builder, Offset <tflite.Metadata>[] data)
 {
     builder.StartVector(4, data.Length, 4); builder.Add(data); return(builder.EndVector());
 }
Exemple #6
0
 public static VectorOffset CreateContentHashesVectorBlock(FlatBufferBuilder builder, Offset <Dragapult.Models.PokecampHashTable>[] data)
 {
     builder.StartVector(4, data.Length, 4); builder.Add(data); return(builder.EndVector());
 }
 public static VectorOffset CreateV8VectorBlock(FlatBufferBuilder builder, sbyte[] data)
 {
     builder.StartVector(1, data.Length, 1); builder.Add(data); return(builder.EndVector());
 }
        public void TestVTableWithEmptyVector()
        {
            var builder = new FlatBufferBuilder(1);
            builder.StartVector(sizeof(byte), 0, 1);
            var vecEnd = builder.EndVector();

            builder.StartObject(1);

            builder.AddOffset(0, vecEnd.Value, 0);
            builder.EndObject();
            Assert.ArrayEqual(new byte[]
            {
                0, 0, 0, 0,
                0, 0, 0, 0,
                0, 0, 0, 0,
                0, 0,       // Padding to 32 bytes
                6, 0, // vtable bytes
                8, 0, // object length inc vtable offset
                4, 0, // start of vector offset value 0
                6, 0, 0, 0, // int32 offset for start of vtable
                4, 0, 0, 0,
                0, 0, 0, 0,
            },
                builder.DataBuffer.Data);
        }
Exemple #9
0
 public static VectorOffset CreateDevicesVectorBlock(FlatBufferBuilder builder, Offset <NymaTypes.NDeviceInfo>[] data)
 {
     builder.StartVector(4, data.Length, 4); builder.Add(data); return(builder.EndVector());
 }
Exemple #10
0
        public static ByteBuffer Save(UnityEngine.Mesh mesh, UnityEngine.Transform[] bones)
        {
            FlatBufferBuilder builder = new FlatBufferBuilder(InitBufferSize);

            // 创建顶点成分
            MeshComponent[] components =
            {
                // vertices
                new MeshComponent(
                    () =>   { return(true);                                                        },
                    () =>   { Schema.Mesh.StartVerticesVector(builder, mesh.vertexCount);          },
                    (i) =>  { Vec3.CreateVec3(builder, mesh.vertices[i].x, mesh.vertices[i].y, mesh.vertices[i].z);},
                    (vo) => { Schema.Mesh.AddVertices(builder, vo);                                }
                    ),
                // uv
                new MeshComponent(
                    () =>   { return((mesh.uv != null) && (mesh.uv.Length > 0));                   },
                    () =>   { Schema.Mesh.StartUvVector(builder, mesh.vertexCount);                },
                    (i) =>  { Vec2.CreateVec2(builder, mesh.uv[i].x, mesh.uv[i].y);                },
                    (vo) => { Schema.Mesh.AddUv(builder, vo);                                      }
                    ),
                // uv2
                new MeshComponent(
                    () =>   { return((mesh.uv2 != null) && (mesh.uv2.Length > 0));                 },
                    () =>   { Schema.Mesh.StartUv2Vector(builder, mesh.vertexCount);               },
                    (i) =>  { Vec2.CreateVec2(builder, mesh.uv2[i].x, mesh.uv2[i].y);              },
                    (vo) => { Schema.Mesh.AddUv2(builder, vo);                                     }
                    ),
                // uv3
                new MeshComponent(
                    () =>   { return((mesh.uv3 != null) && (mesh.uv3.Length > 0));                 },
                    () =>   { Schema.Mesh.StartUv3Vector(builder, mesh.vertexCount);               },
                    (i) =>  { Vec2.CreateVec2(builder, mesh.uv3[i].x, mesh.uv3[i].y);              },
                    (vo) => { Schema.Mesh.AddUv3(builder, vo);                                     }
                    ),
                // uv4
                new MeshComponent(
                    () =>   { return((mesh.uv4 != null) && (mesh.uv4.Length > 0));                 },
                    () =>   { Schema.Mesh.StartUv4Vector(builder, mesh.vertexCount);               },
                    (i) =>  { Vec2.CreateVec2(builder, mesh.uv4[i].x, mesh.uv4[i].y);              },
                    (vo) => { Schema.Mesh.AddUv4(builder, vo);                                     }
                    ),
                // normals
                new MeshComponent(
                    () =>   { return((mesh.normals != null) && (mesh.normals.Length > 0));         },
                    () =>   { Schema.Mesh.StartNormalsVector(builder, mesh.vertexCount);           },
                    (i) =>  { Vec3.CreateVec3(builder, mesh.normals[i].x, mesh.normals[i].y, mesh.normals[i].z);},
                    (vo) => { Schema.Mesh.AddNormals(builder, vo);                                 }
                    ),
                // tangents
                new MeshComponent(
                    () =>   { return((mesh.tangents != null) && (mesh.tangents.Length > 0));       },
                    () =>   { Schema.Mesh.StartTangentsVector(builder, mesh.vertexCount);          },
                    (i) =>  { Vec4.CreateVec4(builder, mesh.tangents[i].x, mesh.tangents[i].y, mesh.tangents[i].z, mesh.tangents[i].w);},
                    (vo) => { Schema.Mesh.AddTangents(builder, vo);                                }
                    ),
                // colors
                new MeshComponent(
                    () =>   { return((mesh.colors != null) && (mesh.colors.Length > 0));           },
                    () =>   { Schema.Mesh.StartColorsVector(builder, mesh.vertexCount);            },
                    (i) =>  { Schema.Color.CreateColor(builder, mesh.colors[i].a, mesh.colors[i].b, mesh.colors[i].g, mesh.colors[i].r);},
                    (vo) => { Schema.Mesh.AddColors(builder, vo);                                  }
                    ),
                // colors32
                new MeshComponent(
                    () =>   { return((mesh.colors32 != null) && (mesh.colors.Length > 0));         },
                    () =>   { Schema.Mesh.StartColors32Vector(builder, mesh.vertexCount);          },
                    (i) =>  { Schema.Color32.CreateColor32(builder, mesh.colors32[i].a, mesh.colors32[i].b, mesh.colors32[i].g, mesh.colors32[i].r);},
                    (vo) => { Schema.Mesh.AddColors32(builder, vo);                                }
                    ),
                // BoneWeigths
                new MeshComponent(
                    () =>   { return((mesh.boneWeights != null) && (mesh.boneWeights.Length > 0)); },
                    () =>   { Schema.Mesh.StartBoneWeightsVector(builder, mesh.vertexCount);       },
                    (i) =>  { Schema.BoneWeight.CreateBoneWeight(builder,
                                                                 mesh.boneWeights[i].boneIndex0, mesh.boneWeights[i].boneIndex1, mesh.boneWeights[i].boneIndex2, mesh.boneWeights[i].boneIndex3,
                                                                 mesh.boneWeights[i].weight0, mesh.boneWeights[i].weight1, mesh.boneWeights[i].weight2, mesh.boneWeights[i].weight3
                                                                 ); },
                    (vo) => { Schema.Mesh.AddBoneWeights(builder, vo);                             }
                    )
            };

            int componentCount = components.Length;

            VectorOffset[] vectorOffsets = new VectorOffset[componentCount];
            for (int c = 0; c < componentCount; c++)
            {
                if (components[c].funcExist())
                {
                    components[c].actStart();
                    for (int i = mesh.vertexCount - 1; i >= 0; i--) // 添加时顺序颠倒。
                    {
                        components[c].actElem(i);                   // 结构vector不需要AddOffset
                    }
                    vectorOffsets[c] = builder.EndVector();
                }
            }

            // 创建 Submesh
            Offset <SubMesh>[] offSubmeshes = new Offset <SubMesh> [mesh.subMeshCount];
            uint offset = 0;

            for (int i = 0; i < mesh.subMeshCount; i++)
            {
                int[] _is = mesh.GetIndices(i);
                offSubmeshes[i] = SubMesh.CreateSubMesh(builder, offset, (uint)_is.Length, (Schema.MeshTopology)mesh.GetTopology(i));
                offset         += (uint)_is.Length;
            }
            // 网格所涉及到的骨骼
            StringOffset[] offJoints = new StringOffset[bones.Length];
            for (int i = 0; i < bones.Length; i++)
            {
                offJoints[i] = builder.CreateString(bones[i].name);
            }
            // BindPoses
            Schema.Mesh.StartBindposesVector(builder, mesh.bindposes.Length);
            for (int i = mesh.bindposes.Length - 1; i >= 0; i--)
            {
                Matrix4x4 m = mesh.bindposes[i];
                Matrix16.CreateMatrix16(builder,
                                        m.m00, m.m01, m.m02, m.m03,
                                        m.m10, m.m11, m.m12, m.m13,
                                        m.m20, m.m21, m.m22, m.m23,
                                        m.m30, m.m31, m.m32, m.m33
                                        );
            }
            VectorOffset vecBindPoses = builder.EndVector();

            // 三角面索引数据  标量数组可以直接添加。
            VectorOffset vecTrangles = Schema.Mesh.CreateTrianglesVector(builder, mesh.triangles);
            // Submesh 数据
            VectorOffset vecSubmeshes = Schema.Mesh.CreateSubmeshesVector(builder, offSubmeshes);
            // 涉及到的骨骼
            VectorOffset vecJoints = Schema.Mesh.CreateJointsVector(builder, offJoints);

            // 放入Mesh
            Schema.Mesh.StartMesh(builder);
            // 顶点数据
            for (int c = 0; c < componentCount; c++)
            {
                if (components[c].funcExist())
                {
                    components[c].actAdd(vectorOffsets[c]);
                }
            }
            Schema.Mesh.AddTriangles(builder, vecTrangles);
            Schema.Mesh.AddSubmeshes(builder, vecSubmeshes);
            Schema.Mesh.AddJoints(builder, vecJoints);
            Schema.Mesh.AddBindposes(builder, vecBindPoses);

            // 边界
            Vector3 min = mesh.bounds.min;
            Vector3 max = mesh.bounds.max;

            Schema.Mesh.AddBound(builder, Schema.Bound.CreateBound(builder, min.x, min.y, min.z, max.x, max.y, max.z));
            Offset <Schema.Mesh> offMesh = Schema.Mesh.EndMesh(builder);

            builder.Finish(offMesh.Value);
            return(builder.DataBuffer);
        }
Exemple #11
0
 public static VectorOffset CreateDebugsVectorBlock(FlatBufferBuilder builder, Offset <syncnet.DebugRaycast>[] data)
 {
     builder.StartVector(4, data.Length, 4); builder.Add(data); return(builder.EndVector());
 }
Exemple #12
0
        public async Task StepAsync(CancellationToken cancellationToken)
        {
            try
            {
                if (player != null)
                {
                    var builder = new FlatBufferBuilder(1);

                    lock (world.Bodies) // wrong kind of lock but might do for now
                    {
                        // First try to focus camera on the player if they have
                        // a fleet alive;
                        var followFleet = player?.Fleet;

                        // if the player doesn't have a fleet alive
                        if (followFleet == null)
                        {
                            // check to see if they are spectating a fleet that's alive
                            if (SpectatingFleet != null && SpectatingFleet.Exists)
                            {
                                followFleet = SpectatingFleet;
                            }
                        }

                        if (followFleet == null)
                        {
                            // find someone else to watch
                            followFleet = Player.GetWorldPlayers(world)
                                          .ToList()
                                          .Where(p => p.IsAlive)
                                          .OrderByDescending(p => p.Score * 10000 + (10000 - p.Fleet?.ID ?? 0))
                                          .FirstOrDefault()
                                          ?.Fleet;
                        }

                        Body followBody = null;

                        // if we're watching a fleet, watch the center of their fleet
                        if (followFleet != null)
                        {
                            if (world.Hook.FollowFirstShip)
                            {
                                followBody = followFleet.Ships.FirstOrDefault();
                            }
                            else
                            {
                                var center = FleetMath.FleetCenterNaive(followFleet.Ships);
                                followBody = new Body
                                {
                                    DefinitionTime   = world.Time,
                                    OriginalPosition = center,
                                    Position         = center,
                                    Momentum         = followFleet.FleetMomentum
                                };
                            }
                        }

                        // we've found someone to spectate, record it
                        if (followFleet != player?.Fleet && followFleet != SpectatingFleet)
                        {
                            SpectatingFleet = followFleet;
                        }

                        // if we haven't found anything to watch yet, watch the first ship we find
                        if (followBody == null)
                        {
                            followBody = player?.World.Bodies.OfType <Ship>().FirstOrDefault();
                        }

                        // if we haven't found anything to watch yet, watch anything
                        if (followBody == null)
                        {
                            followBody = player?.World.Bodies.FirstOrDefault();
                        }

                        if (followBody != null)
                        {
                            var size           = 6000;
                            var viewportHeight = size * 2;
                            var viewportWidth  = size * 2;

                            var playerViewport = new Envelope(
                                followBody.Position.X - viewportWidth / 2,
                                followBody.Position.Y - viewportHeight / 2,
                                followBody.Position.X + viewportWidth / 2,
                                followBody.Position.Y + viewportHeight / 2
                                );

                            BodyCache.Update(
                                world.BodiesNear(playerViewport).ToList(),
                                world.Time
                                );

                            var updates = BodyCache.BodiesByError();

                            var updateBodies = updates.Take((int)this.Bandwidth);

                            float VELOCITY_SCALE_FACTOR = 5000;

                            var updatedGroups = BodyCache.GroupsByError().ToList();

                            var groupsVector = NetWorldView.CreateGroupsVector(builder,
                                                                               updatedGroups.Select(b =>
                            {
                                var serverGroup = b.GroupUpdated;

                                var caption    = builder.CreateString(serverGroup.Caption ?? " ");
                                var color      = builder.CreateString(serverGroup.Color ?? "");
                                var customData = builder.CreateString(serverGroup.CustomData ?? "");

                                var group = NetGroup.CreateNetGroup(builder,
                                                                    group: serverGroup.ID,
                                                                    type: (byte)serverGroup.GroupType,
                                                                    captionOffset: caption,
                                                                    zindex: serverGroup.ZIndex,
                                                                    owner: serverGroup.OwnerID,
                                                                    colorOffset: color,
                                                                    customDataOffset: customData
                                                                    );
                                return(group);
                            }).ToArray());


                            foreach (var update in updatedGroups)
                            {
                                update.GroupClient = update.GroupUpdated.Clone();
                            }

                            var groupDeletesVector = NetWorldView.CreateGroupDeletesVector(builder, BodyCache.CollectStaleGroups().Select(b =>
                                                                                                                                          b.GroupUpdated.ID
                                                                                                                                          ).ToArray());


                            NetWorldView.StartUpdatesVector(builder, updateBodies.Count());
                            foreach (var b in updateBodies)
                            {
                                var serverBody = b.BodyUpdated;

                                var body = NetBody.CreateNetBody(builder,
                                                                 Id: serverBody.ID,
                                                                 DefinitionTime: serverBody.DefinitionTime,
                                                                 originalPosition_X: (short)serverBody.OriginalPosition.X,
                                                                 originalPosition_Y: (short)serverBody.OriginalPosition.Y,
                                                                 velocity_X: (short)(serverBody.Momentum.X * VELOCITY_SCALE_FACTOR),
                                                                 velocity_Y: (short)(serverBody.Momentum.Y * VELOCITY_SCALE_FACTOR),
                                                                 OriginalAngle: (sbyte)(serverBody.OriginalAngle / MathF.PI * 127),
                                                                 AngularVelocity: (sbyte)(serverBody.AngularVelocity * 10000),
                                                                 Size: (byte)(serverBody.Size / 5),
                                                                 Sprite: (ushort)serverBody.Sprite,
                                                                 Mode: serverBody.Mode,
                                                                 Group: serverBody.Group?.ID ?? 0);
                            }

                            var updatesVector = builder.EndVector();

                            foreach (var update in updateBodies)
                            {
                                update.BodyClient = update.BodyUpdated.Clone();
                            }

                            var deletesVector = NetWorldView.CreateDeletesVector(builder, BodyCache.CollectStaleBuckets().Select(b =>
                                                                                                                                 b.BodyUpdated.ID
                                                                                                                                 ).ToArray());

                            var          messages            = player.GetMessages();
                            VectorOffset announcementsVector = new VectorOffset();
                            if (messages != null && messages.Any())
                            {
                                announcementsVector = NetWorldView.CreateAnnouncementsVector(builder, messages.Select(e =>
                                {
                                    var stringType      = builder.CreateString(e.Type);
                                    var stringMessage   = builder.CreateString(e.Message);
                                    var stringExtraData = e.ExtraData != null
                                        ? builder.CreateString(JsonConvert.SerializeObject(e.ExtraData))
                                        : new StringOffset();

                                    NetAnnouncement.StartNetAnnouncement(builder);
                                    NetAnnouncement.AddType(builder, stringType);
                                    NetAnnouncement.AddText(builder, stringMessage);
                                    if (e.ExtraData != null)
                                    {
                                        NetAnnouncement.AddExtraData(builder, stringExtraData);
                                    }
                                    NetAnnouncement.AddPointsDelta(builder, e.PointsDelta);

                                    return(NetAnnouncement.EndNetAnnouncement(builder));
                                }).ToArray());
                            }

                            StringOffset customOffset = new StringOffset();
                            if (followFleet?.CustomData != null && followFleet.CustomData != CustomData)
                            {
                                customOffset = builder.CreateString(followFleet.CustomData);
                            }

                            NetWorldView.StartNetWorldView(builder);

                            // define camera
                            var cameraBody = NetBody.CreateNetBody(
                                builder,
                                Id: 0,
                                DefinitionTime: followBody?.DefinitionTime ?? 0,
                                originalPosition_X: (short)(followBody?.OriginalPosition.X ?? 0),
                                originalPosition_Y: (short)(followBody?.OriginalPosition.Y ?? 0),
                                velocity_X: (short)(followBody?.Momentum.X * VELOCITY_SCALE_FACTOR ?? 0),
                                velocity_Y: (short)(followBody?.Momentum.Y * VELOCITY_SCALE_FACTOR ?? 0),
                                OriginalAngle: (sbyte)(followBody?.OriginalAngle / MathF.PI / 127 ?? 0),
                                AngularVelocity: 0,
                                Size: 0,
                                Sprite: 0,
                                Mode: 0,
                                Group: 0
                                );

                            NetWorldView.AddCamera(builder, cameraBody);
                            NetWorldView.AddIsAlive(builder, player?.IsAlive ?? false);
                            NetWorldView.AddTime(builder, world.Time);

                            NetWorldView.AddUpdates(builder, updatesVector);
                            NetWorldView.AddDeletes(builder, deletesVector);

                            NetWorldView.AddGroups(builder, groupsVector);
                            NetWorldView.AddGroupDeletes(builder, groupDeletesVector);
                            if (messages != null && messages.Any())
                            {
                                NetWorldView.AddAnnouncements(builder, announcementsVector);
                            }

                            if (followFleet?.CustomData != null && followFleet.CustomData != CustomData)
                            {
                                NetWorldView.AddCustomData(builder, customOffset);
                            }
                            CustomData = followFleet?.CustomData;

                            var players = Player.GetWorldPlayers(world);
                            NetWorldView.AddPlayerCount(builder, (uint)world.AdvertisedPlayerCount);
                            NetWorldView.AddSpectatorCount(builder, (uint)players.Count(p => p.Connection?.IsSpectating ?? false));

                            NetWorldView.AddCooldownBoost(builder, (byte)((player?.Fleet?.BoostCooldownStatus * 255) ?? 0));
                            NetWorldView.AddCooldownShoot(builder, (byte)((player?.Fleet?.ShootCooldownStatus * 255) ?? 0));
                            NetWorldView.AddWorldSize(builder, (ushort)world.Hook.WorldSize);

                            if (followFleet != null)
                            {
                                // inform the client of which the fleet id
                                NetWorldView.AddFleetID(builder, (uint)followFleet.ID);
                            }
                            else
                            {
                                NetWorldView.AddFleetID(builder, 0);
                            }

                            var worldView = NetWorldView.EndNetWorldView(builder);

                            var newHash = world.Hook.GetHashCode();
                            if (HookHash != newHash)
                            {
                                this.Events.Enqueue(new BroadcastEvent
                                {
                                    EventType = "hook",
                                    Data      = JsonConvert.SerializeObject(world.Hook)
                                });
                            }

                            HookHash = newHash;

                            var q = NetQuantum.CreateNetQuantum(builder, AllMessages.NetWorldView, worldView.Value);
                            builder.Finish(q.Value);
                        }
                    }
                    await this.SendAsync(builder.DataBuffer, cancellationToken);

                    if (LeaderboardTime != (world.Leaderboard?.Time ?? 0))
                    {
                        LeaderboardTime = (world.Leaderboard?.Time ?? 0);

                        builder = new FlatBufferBuilder(1);

                        var stringName  = builder.CreateString(world.Leaderboard?.ArenaRecord?.Name ?? " ");
                        var stringColor = builder.CreateString(world.Leaderboard?.ArenaRecord?.Color ?? " ");

                        NetLeaderboardEntry.StartNetLeaderboardEntry(builder);
                        NetLeaderboardEntry.AddColor(builder, stringColor);
                        NetLeaderboardEntry.AddName(builder, stringName);
                        NetLeaderboardEntry.AddScore(builder, world.Leaderboard?.ArenaRecord?.Score ?? 0);
                        NetLeaderboardEntry.AddToken(builder, !string.IsNullOrEmpty(world.Leaderboard?.ArenaRecord?.Token));
                        var record = NetLeaderboardEntry.EndNetLeaderboardEntry(builder);


                        var entriesVector = NetLeaderboard.CreateEntriesVector(builder, world.Leaderboard.Entries.Select(e =>
                        {
                            // the strings must be created into the buffer before the are referenced
                            // and before the start of the entry object
                            stringName  = builder.CreateString(e.Name ?? string.Empty);
                            stringColor = builder.CreateString(e.Color ?? string.Empty);
                            StringOffset stringModeData = new StringOffset();

                            if (e.ModeData != null)
                            {
                                stringModeData = builder.CreateString(JsonConvert.SerializeObject(e.ModeData));
                            }

                            // here's the start of the entry object, after this we can only use
                            // predefined string offsets
                            NetLeaderboardEntry.StartNetLeaderboardEntry(builder);
                            NetLeaderboardEntry.AddFleetID(builder, e.FleetID);
                            NetLeaderboardEntry.AddName(builder, stringName);
                            NetLeaderboardEntry.AddColor(builder, stringColor);
                            NetLeaderboardEntry.AddScore(builder, e.Score);
                            NetLeaderboardEntry.AddPosition(builder, FromPositionVector(builder, e.Position));
                            NetLeaderboardEntry.AddToken(builder, !string.IsNullOrEmpty(e.Token));
                            if (e.ModeData != null)
                            {
                                NetLeaderboardEntry.AddModeData(builder, stringModeData);
                            }

                            return(NetLeaderboardEntry.EndNetLeaderboardEntry(builder));
                        }).ToArray());

                        var stringType = builder.CreateString(world.Leaderboard.Type ?? string.Empty);
                        NetLeaderboard.StartNetLeaderboard(builder);
                        NetLeaderboard.AddEntries(builder, entriesVector);
                        NetLeaderboard.AddType(builder, stringType);
                        NetLeaderboard.AddRecord(builder, record);

                        var leaderboardOffset = NetLeaderboard.EndNetLeaderboard(builder);

                        builder.Finish(NetQuantum.CreateNetQuantum(builder, AllMessages.NetLeaderboard, leaderboardOffset.Value).Value);
                        await this.SendAsync(builder.DataBuffer, cancellationToken);
                    }

                    while (Events.Count > 0)
                    {
                        var e = Events.Dequeue();

                        var eventType = builder.CreateString(e.EventType);
                        var eventData = builder.CreateString(e.Data);
                        NetEvent.StartNetEvent(builder);
                        NetEvent.AddType(builder, eventType);
                        NetEvent.AddData(builder, eventData);
                        var eventOffset = NetEvent.EndNetEvent(builder);

                        builder.Finish(NetQuantum.CreateNetQuantum(builder, AllMessages.NetEvent, eventOffset.Value).Value);
                        await this.SendAsync(builder.DataBuffer, cancellationToken);
                    }
                }
            }
            catch (WebSocketException)
            {
                //Console.WriteLine(e);
                throw;
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                throw;
            }
        }
Exemple #13
0
 public static VectorOffset CreateOutputsVectorBlock(FlatBufferBuilder builder, Offset <IntPair>[] data)
 {
     builder.StartVector(4, data.Length, 4); builder.Add(data); return(builder.EndVector());
 }
 public static VectorOffset CreateDurationParentIdVectorBlock(FlatBufferBuilder builder, uint[] data)
 {
     builder.StartVector(4, data.Length, 4); builder.Add(data); return(builder.EndVector());
 }
        public void TestVTableWith_1xInt16_and_Vector_or_2xInt16()
        {
            var builder = new FlatBufferBuilder(1);
            builder.StartVector(sizeof(short), 2, 1);
            builder.AddShort(0x1234);
            builder.AddShort(0x5678);
            var vecEnd = builder.EndVector();

            builder.StartObject(2);
            builder.AddOffset(1, vecEnd.Value, 0);
            builder.AddShort(0, 55, 0);
            builder.EndObject();
            Assert.ArrayEqual(new byte[]
            {
                0, 0, 0, 0, // Padding to 32 bytes
                8, 0, // vtable bytes
                12, 0, // object length
                6, 0,     // start of value 0 from end of vtable
                8, 0,     // start of value 1 from end of buffer
                8, 0, 0, 0, // int32 offset for start of vtable
                0, 0, 55, 0,    // padding + value 0
                4, 0, 0, 0, // position of vector from here
                2, 0, 0, 0, // length of vector
                0x78, 0x56,       // vector value 0
                0x34, 0x12,       // vector value 1
            },
                builder.DataBuffer.Data);
        }
        public void TestVTableWithEmptyVectorAndScalars()
        {
            var builder = new FlatBufferBuilder(1);
            builder.StartVector(sizeof(byte), 0, 1);
            var vecEnd = builder.EndVector();

            builder.StartObject(2);
            builder.AddShort(0, 55, 0);
            builder.AddOffset(1, vecEnd.Value, 0);
            builder.EndObject();
            Assert.ArrayEqual(new byte[]
            {
                0, 0, 0, 0,
                0, 0, 0, 0, // Padding to 32 bytes
                8, 0, // vtable bytes
                12, 0, // object length inc vtable offset
                10, 0,     // offset to int16 value 0
                4, 0, // start of vector offset value 1
                8, 0, 0, 0, // int32 offset for start of vtable
                8, 0, 0, 0, // value 1
                0, 0, 55, 0, // value 0
                0, 0, 0, 0, // length of vector (not in sctruc)
            },
                builder.DataBuffer.Data);
        }
 public static VectorOffset CreateShapeVectorBlock(FlatBufferBuilder builder, long[] data)
 {
     builder.StartVector(8, data.Length, 8); builder.Add(data); return(builder.EndVector());
 }
Exemple #18
0
 public static VectorOffset CreateAgentsVectorBlock(FlatBufferBuilder builder, Offset <syncnet.AgentInfo>[] data)
 {
     builder.StartVector(4, data.Length, 4); builder.Add(data); return(builder.EndVector());
 }
        public void CanCreateNewFlatBufferFromScratch()
        {
            // Second, let's create a FlatBuffer from scratch in C#, and test it also.
            // We use an initial size of 1 to exercise the reallocation algorithm,
            // normally a size larger than the typical FlatBuffer you generate would be
            // better for performance.
            var fbb = new FlatBufferBuilder(1);

            // We set up the same values as monsterdata.json:

            var str = fbb.CreateString("MyMonster");
            var test1 = fbb.CreateString("test1");
            var test2 = fbb.CreateString("test2");


            Monster.StartInventoryVector(fbb, 5);
            for (int i = 4; i >= 0; i--)
            {
                fbb.AddByte((byte)i);
            }
            var inv = fbb.EndVector();

            var fred = fbb.CreateString("Fred");
            Monster.StartMonster(fbb);
            Monster.AddName(fbb, fred);
            var mon2 = Monster.EndMonster(fbb);

            Monster.StartTest4Vector(fbb, 2);
            MyGame.Example.Test.CreateTest(fbb, (short)10, (sbyte)20);
            MyGame.Example.Test.CreateTest(fbb, (short)30, (sbyte)40);
            var test4 = fbb.EndVector();

            Monster.StartTestarrayofstringVector(fbb, 2);
            fbb.AddOffset(test2.Value);
            fbb.AddOffset(test1.Value);
            var testArrayOfString = fbb.EndVector();

            Monster.StartMonster(fbb);
            Monster.AddPos(fbb, Vec3.CreateVec3(fbb, 1.0f, 2.0f, 3.0f, 3.0,
                                                     Color.Green, (short)5, (sbyte)6));
            Monster.AddHp(fbb, (short)80);
            Monster.AddName(fbb, str);
            Monster.AddInventory(fbb, inv);
            Monster.AddTestType(fbb, Any.Monster);
            Monster.AddTest(fbb, mon2.Value);
            Monster.AddTest4(fbb, test4);
            Monster.AddTestarrayofstring(fbb, testArrayOfString);
            Monster.AddTestbool(fbb, false);
            var mon = Monster.EndMonster(fbb);

            Monster.FinishMonsterBuffer(fbb, mon);


            // Dump to output directory so we can inspect later, if needed
            using (var ms = new MemoryStream(fbb.DataBuffer.Data, fbb.DataBuffer.Position, fbb.Offset))
            {
                var data = ms.ToArray();
                File.WriteAllBytes(@"Resources/monsterdata_cstest.mon",data);
            }

            // Now assert the buffer
            TestBuffer(fbb.DataBuffer);

            //Attempt to mutate Monster fields and check whether the buffer has been mutated properly
            // revert to original values after testing
            Monster monster = Monster.GetRootAsMonster(fbb.DataBuffer);

            // mana is optional and does not exist in the buffer so the mutation should fail
            // the mana field should retain its default value
            Assert.AreEqual(monster.MutateMana((short)10), false);
            Assert.AreEqual(monster.Mana, (short)150);

            // testType is an existing field and mutating it should succeed
            Assert.AreEqual(monster.TestType, Any.Monster);
            Assert.AreEqual(monster.MutateTestType(Any.NONE), true);
            Assert.AreEqual(monster.TestType, Any.NONE);
            Assert.AreEqual(monster.MutateTestType(Any.Monster), true);
            Assert.AreEqual(monster.TestType, Any.Monster);

            //mutate the inventory vector
            Assert.AreEqual(monster.MutateInventory(0, 1), true);
            Assert.AreEqual(monster.MutateInventory(1, 2), true);
            Assert.AreEqual(monster.MutateInventory(2, 3), true);
            Assert.AreEqual(monster.MutateInventory(3, 4), true);
            Assert.AreEqual(monster.MutateInventory(4, 5), true);

            for (int i = 0; i < monster.InventoryLength; i++)
            {
                Assert.AreEqual(monster.GetInventory(i), i + 1);
            }

            //reverse mutation
            Assert.AreEqual(monster.MutateInventory(0, 0), true);
            Assert.AreEqual(monster.MutateInventory(1, 1), true);
            Assert.AreEqual(monster.MutateInventory(2, 2), true);
            Assert.AreEqual(monster.MutateInventory(3, 3), true);
            Assert.AreEqual(monster.MutateInventory(4, 4), true);

            // get a struct field and edit one of its fields
            Vec3 pos = monster.Pos;
            Assert.AreEqual(pos.X, 1.0f);
            pos.MutateX(55.0f);
            Assert.AreEqual(pos.X, 55.0f);
            pos.MutateX(1.0f);
            Assert.AreEqual(pos.X, 1.0f);

            TestBuffer(fbb.DataBuffer);
        }
Exemple #20
0
 public static VectorOffset CreateTilesVectorBlock(FlatBufferBuilder builder, ushort[] data)
 {
     builder.StartVector(2, data.Length, 2); builder.Add(data); return(builder.EndVector());
 }
Exemple #21
0
 public static VectorOffset CreateTestCustomObjArraysVectorBlock(FlatBufferBuilder builder, Offset <PositionArray3d>[] data)
 {
     builder.StartVector(4, data.Length, 4); builder.Add(data); return(builder.EndVector());
 }
Exemple #22
0
 public static VectorOffset CreateVectorOfStrongReferrablesVectorBlock(FlatBufferBuilder builder, Offset <Referrable>[] data)
 {
     builder.StartVector(4, data.Length, 4); builder.Add(data); return(builder.EndVector());
 }
Exemple #23
0
 public static VectorOffset CreateIdentifierTableVectorBlock(FlatBufferBuilder builder, Offset <Dragapult.Models.PokecampTableWrapper>[] data)
 {
     builder.StartVector(4, data.Length, 4); builder.Add(data); return(builder.EndVector());
 }
Exemple #24
0
 public static VectorOffset CreateVectorOfNonOwningReferencesVectorBlock(FlatBufferBuilder builder, ulong[] data)
 {
     builder.StartVector(8, data.Length, 8); builder.Add(data); return(builder.EndVector());
 }
        private void CanCreateNewFlatBufferFromScratch(bool sizePrefix)
        {
            // Second, let's create a FlatBuffer from scratch in C#, and test it also.
            // We use an initial size of 1 to exercise the reallocation algorithm,
            // normally a size larger than the typical FlatBuffer you generate would be
            // better for performance.
            var fbb = new FlatBufferBuilder(1);

            StringOffset[]     names = { fbb.CreateString("Frodo"), fbb.CreateString("Barney"), fbb.CreateString("Wilma") };
            Offset <Monster>[] off   = new Offset <Monster> [3];
            Monster.StartMonster(fbb);
            Monster.AddName(fbb, names[0]);
            off[0] = Monster.EndMonster(fbb);
            Monster.StartMonster(fbb);
            Monster.AddName(fbb, names[1]);
            off[1] = Monster.EndMonster(fbb);
            Monster.StartMonster(fbb);
            Monster.AddName(fbb, names[2]);
            off[2] = Monster.EndMonster(fbb);
            var sortMons = Monster.CreateSortedVectorOfMonster(fbb, off);

            // We set up the same values as monsterdata.json:

            var str   = fbb.CreateString("MyMonster");
            var test1 = fbb.CreateString("test1");
            var test2 = fbb.CreateString("test2");


            Monster.StartInventoryVector(fbb, 5);
            for (int i = 4; i >= 0; i--)
            {
                fbb.AddByte((byte)i);
            }
            var inv = fbb.EndVector();

            var fred = fbb.CreateString("Fred");

            Monster.StartMonster(fbb);
            Monster.AddName(fbb, fred);
            var mon2 = Monster.EndMonster(fbb);

            Monster.StartTest4Vector(fbb, 2);
            MyGame.Example.Test.CreateTest(fbb, (short)10, (sbyte)20);
            MyGame.Example.Test.CreateTest(fbb, (short)30, (sbyte)40);
            var test4 = fbb.EndVector();

            Monster.StartTestarrayofstringVector(fbb, 2);
            fbb.AddOffset(test2.Value);
            fbb.AddOffset(test1.Value);
            var testArrayOfString = fbb.EndVector();

            Monster.StartMonster(fbb);
            Monster.AddPos(fbb, Vec3.CreateVec3(fbb, 1.0f, 2.0f, 3.0f, 3.0,
                                                Color.Green, (short)5, (sbyte)6));
            Monster.AddHp(fbb, (short)80);
            Monster.AddName(fbb, str);
            Monster.AddInventory(fbb, inv);
            Monster.AddTestType(fbb, Any.Monster);
            Monster.AddTest(fbb, mon2.Value);
            Monster.AddTest4(fbb, test4);
            Monster.AddTestarrayofstring(fbb, testArrayOfString);
            Monster.AddTestbool(fbb, true);
            Monster.AddTestarrayoftables(fbb, sortMons);
            var mon = Monster.EndMonster(fbb);

            if (sizePrefix)
            {
                Monster.FinishSizePrefixedMonsterBuffer(fbb, mon);
            }
            else
            {
                Monster.FinishMonsterBuffer(fbb, mon);
            }

            // Dump to output directory so we can inspect later, if needed
            #if ENABLE_SPAN_T
            var    data     = fbb.DataBuffer.ToSizedArray();
            string filename = @"Resources/monsterdata_cstest" + (sizePrefix ? "_sp" : "") + ".mon";
            File.WriteAllBytes(filename, data);
            #else
            using (var ms = fbb.DataBuffer.ToMemoryStream(fbb.DataBuffer.Position, fbb.Offset))
            {
                var    data     = ms.ToArray();
                string filename = @"Resources/monsterdata_cstest" + (sizePrefix ? "_sp" : "") + ".mon";
                File.WriteAllBytes(filename, data);
            }
            #endif

            // Remove the size prefix if necessary for further testing
            ByteBuffer dataBuffer = fbb.DataBuffer;
            if (sizePrefix)
            {
                Assert.AreEqual(ByteBufferUtil.GetSizePrefix(dataBuffer) + FlatBufferConstants.SizePrefixLength,
                                dataBuffer.Length - dataBuffer.Position);
                dataBuffer = ByteBufferUtil.RemoveSizePrefix(dataBuffer);
            }

            // Now assert the buffer
            TestBuffer(dataBuffer);

            //Attempt to mutate Monster fields and check whether the buffer has been mutated properly
            // revert to original values after testing
            Monster monster = Monster.GetRootAsMonster(dataBuffer);


            // mana is optional and does not exist in the buffer so the mutation should fail
            // the mana field should retain its default value
            Assert.AreEqual(monster.MutateMana((short)10), false);
            Assert.AreEqual(monster.Mana, (short)150);

            // Accessing a vector of sorted by the key tables
            Assert.AreEqual(monster.Testarrayoftables(0).Value.Name, "Barney");
            Assert.AreEqual(monster.Testarrayoftables(1).Value.Name, "Frodo");
            Assert.AreEqual(monster.Testarrayoftables(2).Value.Name, "Wilma");

            // Example of searching for a table by the key
            Assert.IsTrue(monster.TestarrayoftablesByKey("Frodo") != null);
            Assert.IsTrue(monster.TestarrayoftablesByKey("Barney") != null);
            Assert.IsTrue(monster.TestarrayoftablesByKey("Wilma") != null);

            // testType is an existing field
            Assert.AreEqual(monster.TestType, Any.Monster);

            //mutate the inventory vector
            Assert.AreEqual(monster.MutateInventory(0, 1), true);
            Assert.AreEqual(monster.MutateInventory(1, 2), true);
            Assert.AreEqual(monster.MutateInventory(2, 3), true);
            Assert.AreEqual(monster.MutateInventory(3, 4), true);
            Assert.AreEqual(monster.MutateInventory(4, 5), true);

            for (int i = 0; i < monster.InventoryLength; i++)
            {
                Assert.AreEqual(monster.Inventory(i), i + 1);
            }

            //reverse mutation
            Assert.AreEqual(monster.MutateInventory(0, 0), true);
            Assert.AreEqual(monster.MutateInventory(1, 1), true);
            Assert.AreEqual(monster.MutateInventory(2, 2), true);
            Assert.AreEqual(monster.MutateInventory(3, 3), true);
            Assert.AreEqual(monster.MutateInventory(4, 4), true);

            // get a struct field and edit one of its fields
            Vec3 pos = (Vec3)monster.Pos;
            Assert.AreEqual(pos.X, 1.0f);
            pos.MutateX(55.0f);
            Assert.AreEqual(pos.X, 55.0f);
            pos.MutateX(1.0f);
            Assert.AreEqual(pos.X, 1.0f);

            TestBuffer(dataBuffer);
            TestObjectAPI(Monster.GetRootAsMonster(dataBuffer));
        }
Exemple #26
0
 public static VectorOffset CreateTestarrayoftablesVectorBlock(FlatBufferBuilder builder, Offset <Monster>[] data)
 {
     builder.StartVector(4, data.Length, 4); builder.Add(data); return(builder.EndVector());
 }
Exemple #27
0
 public static VectorOffset CreateCharactersVectorBlock(FlatBufferBuilder builder, int[] data)
 {
     builder.StartVector(4, data.Length, 4); builder.Add(data); return(builder.EndVector());
 }
Exemple #28
0
 public static VectorOffset CreateTestFloatArraysVectorBlock(FlatBufferBuilder builder, float[] data)
 {
     builder.StartVector(4, data.Length, 4); builder.Add(data); return(builder.EndVector());
 }
        public Offset <StateUpdate> ToBuffer(FlatBufferBuilder builder)
        {
            bool         builtPoi         = false;
            bool         changedSiteDrive = false;
            StringOffset nsd = new StringOffset();

            if (!string.IsNullOrEmpty(siteDrive))
            {
                nsd = builder.CreateString(siteDrive);
                changedSiteDrive = true;
            }
            Offset <TargetPlacement> tPlacement = new Offset <TargetPlacement>();

            //build potential updates to the poi
            if (poiPlacementObject.isValid)
            {
                tPlacement = poiPlacementObject.ToBuffer(builder);
                builtPoi   = true;
            }
            //build potential new/updated annotations
            List <Offset <Annotation> > aOffsets = new List <Offset <Annotation> >();

            if (annotationObjects != null)
            {
                for (int j = 0; j < annotationObjects.Count; j++)
                {
                    if (annotationObjects[j].isValid)
                    {
                        aOffsets.Add(annotationObjects[j].ToBuffer(builder));
                    }
                }
            }
            //build all created room objects
            List <Offset <RoomObject> > roOffsets = new List <Offset <RoomObject> >();

            for (int i = 0; i < create.Count; i++)
            {
                roOffsets.Add(create[i].ToBuffer(builder));
            }
            //build all updated room objects
            List <Offset <RoomObject> > ruOffsets = new List <Offset <RoomObject> >();

            for (int i = 0; i < update.Count; i++)
            {
                ruOffsets.Add(update[i].ToBuffer(builder));
            }
            //build vectors
            VectorOffset?deleteOffset = null;

            if (delete.Count > 0)
            {
                StateUpdate.StartDeleteVector(builder, delete.Count);
                for (int i = 0; i < delete.Count; i++)
                {
                    //builder.CreateString(delete[i]);
                    builder.AddInt(delete[i]);
                }
                deleteOffset = builder.EndVector();
            }
            VectorOffset?createOffset = null;

            if (roOffsets.Count > 0)
            {
                createOffset = StateUpdate.CreateCreateVector(builder, roOffsets.ToArray());
            }
            VectorOffset?updateOffset = null;

            if (ruOffsets.Count > 0)
            {
                updateOffset = StateUpdate.CreateUpdateVector(builder, ruOffsets.ToArray());
            }
            VectorOffset?annotationOffset = null;

            if (aOffsets.Count > 0)
            {
                annotationOffset = StateUpdate.CreateAnnotationsVector(builder, aOffsets.ToArray());
            }
            //actually build the buffer
            StateUpdate.StartStateUpdate(builder);
            if (changedSiteDrive)
            {
                StateUpdate.AddSiteDrive(builder, nsd);
            }
            if (builtPoi)
            {
                StateUpdate.AddPoi(builder, tPlacement);
            }
            if (annotationOffset != null)
            {
                StateUpdate.AddAnnotations(builder, (VectorOffset)annotationOffset);
            }
            if (createOffset != null)
            {
                StateUpdate.AddCreate(builder, (VectorOffset)createOffset);
            }
            if (updateOffset != null)
            {
                StateUpdate.AddUpdate(builder, (VectorOffset)updateOffset);
            }
            if (deleteOffset != null)
            {
                StateUpdate.AddDelete(builder, (VectorOffset)deleteOffset);
            }

            var sup = StateUpdate.EndStateUpdate(builder);

            return(sup);
        }
Exemple #30
0
 public static VectorOffset CreateTestDoubleArraysVectorBlock(FlatBufferBuilder builder, double[] data)
 {
     builder.StartVector(8, data.Length, 8); builder.Add(data); return(builder.EndVector());
 }
Exemple #31
0
 public static VectorOffset CreateAnimationsVectorBlock(FlatBufferBuilder builder, Offset <Animation>[] data)
 {
     builder.StartVector(4, data.Length, 4); builder.Add(data); return(builder.EndVector());
 }
Exemple #32
0
 public static VectorOffset CreateTestBoolArraysVectorBlock(FlatBufferBuilder builder, bool[] data)
 {
     builder.StartVector(1, data.Length, 1); builder.Add(data); return(builder.EndVector());
 }
Exemple #33
0
 public static VectorOffset CreateClientsVectorBlock(FlatBufferBuilder builder, Offset <mainServer.schemas.FWaitingRoom.FClient>[] data)
 {
     builder.StartVector(4, data.Length, 4); builder.Add(data); return(builder.EndVector());
 }
 public void TestVector_2xUInt16()
 {
     var builder = new FlatBufferBuilder(1);
     builder.StartVector(sizeof(ushort), 2, 1);
     Assert.ArrayEqual(new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, builder.DataBuffer.Data);
     builder.AddUshort(0xABCD);
     Assert.ArrayEqual(new byte[] { 0, 0, 0, 0, 0, 0, 0xCD, 0xAB }, builder.DataBuffer.Data);
     builder.AddUshort(0xDCBA);
     Assert.ArrayEqual(new byte[] { 0, 0, 0, 0, 0xBA, 0xDC, 0xCD, 0xAB }, builder.DataBuffer.Data);
     builder.EndVector();
     Assert.ArrayEqual(new byte[] { 2, 0, 0, 0, 0xBA, 0xDC, 0xCD, 0xAB }, builder.DataBuffer.Data);
 }
 public static VectorOffset CreateControlDepsVectorBlock(FlatBufferBuilder builder, StringOffset[] data)
 {
     builder.StartVector(4, data.Length, 4); builder.Add(data); return(builder.EndVector());
 }
Exemple #36
0
 public static VectorOffset CreateTestDefineFromGlobal2sVectorBlock(FlatBufferBuilder builder, Offset <Position3d>[] data)
 {
     builder.StartVector(4, data.Length, 4); builder.Add(data); return(builder.EndVector());
 }
Exemple #37
0
 public static VectorOffset CreateTestObjArray1sVectorBlock(FlatBufferBuilder builder, Offset <Config.TestObjArray1_>[] data)
 {
     builder.StartVector(4, data.Length, 4); builder.Add(data); return(builder.EndVector());
 }
        public void TestVTableWithAVectorOf_2xStructOf_2xInt8()
        {
            var builder = new FlatBufferBuilder(1);
            builder.StartVector(sizeof(byte)*2, 2, 1);
            builder.AddByte(33);
            builder.AddByte(44);
            builder.AddByte(55);
            builder.AddByte(66);
            var vecEnd = builder.EndVector();

            builder.StartObject(1);
            builder.AddOffset(0, vecEnd.Value, 0);
            builder.EndObject();

            Assert.ArrayEqual(new byte[]
            {
                0, 0, 0, 0,
                0, 0, 0, 0,
                0, 0, // Padding to 32 bytes
                6, 0, // vtable bytes
                8, 0, // object length
                4, 0,     // offset of vector offset
                6, 0, 0, 0, // int32 offset for start of vtable
                4, 0, 0, 0, // Vector start offset
                2, 0, 0, 0, // Vector len
                66, // vector 1, 1
                55, // vector 1, 0
                44, // vector 0, 1
                33, // vector 0, 0
            },
                builder.DataBuffer.Data);
        }