EncodeBatch builds a flatbuffers PingBatch root containing the given results.
(source string, results []ping.Result)
| 20 | |
| 21 | // EncodeBatch builds a flatbuffers PingBatch root containing the given results. |
| 22 | func EncodeBatch(source string, results []ping.Result) []byte { |
| 23 | builder := flatbuffers.NewBuilder(1024) |
| 24 | |
| 25 | pingOffsets := make([]flatbuffers.UOffsetT, 0, len(results)) |
| 26 | for _, r := range results { |
| 27 | serverOff := builder.CreateString(r.Name) |
| 28 | addrOff := builder.CreateString(r.QueryAddress) |
| 29 | asNameOff := builder.CreateString(r.ASName) |
| 30 | |
| 31 | pb.PingStart(builder) |
| 32 | pb.PingAddTime(builder, uint64(r.Time.Unix())) |
| 33 | pb.PingAddServer(builder, serverOff) |
| 34 | pb.PingAddServerAddress(builder, addrOff) |
| 35 | pb.PingAddPlatform(builder, platformFor(r.Edition)) |
| 36 | pb.PingAddAsNumber(builder, r.ASNum) |
| 37 | pb.PingAddAsName(builder, asNameOff) |
| 38 | if r.PlayerCount != nil { |
| 39 | pb.PingAddPlayerCount(builder, uint32(*r.PlayerCount)) |
| 40 | } |
| 41 | pingOffsets = append(pingOffsets, pb.PingEnd(builder)) |
| 42 | } |
| 43 | |
| 44 | pb.PingBatchStartPingsVector(builder, len(pingOffsets)) |
| 45 | for i := len(pingOffsets) - 1; i >= 0; i-- { |
| 46 | builder.PrependUOffsetT(pingOffsets[i]) |
| 47 | } |
| 48 | pingsVec := builder.EndVector(len(pingOffsets)) |
| 49 | |
| 50 | sourceOff := builder.CreateString(source) |
| 51 | pb.PingBatchStart(builder) |
| 52 | pb.PingBatchAddSource(builder, sourceOff) |
| 53 | pb.PingBatchAddPings(builder, pingsVec) |
| 54 | root := pb.PingBatchEnd(builder) |
| 55 | |
| 56 | builder.Finish(root) |
| 57 | return builder.FinishedBytes() |
| 58 | } |