Skip to content

Commit d65c9c8

Browse files
committed
Add flatbuffers protocol
1 parent 90abc77 commit d65c9c8

22 files changed

+2459
-0
lines changed

justfile

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
set shell := ["powershell.exe", "-c"]
2+
3+
fbs:
4+
Remove-Item -Force -Recurse protocol
5+
flatc -o protocol\rust --rust protocol.fbs
6+
flatc -o protocol\kotlin --kotlin protocol.fbs
7+
flatc -o protocol\ts --ts protocol.fbs

protocol.fbs

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
namespace moe.reimu.virtualdisplay;
2+
3+
union Command {
4+
Video, Audio, Timestamp, Configure, CursorPosition, CursorImage
5+
}
6+
7+
table Packet {
8+
command: Command;
9+
}
10+
11+
table Video {
12+
timestamp: uint64;
13+
}
14+
15+
table Audio {
16+
timestamp: uint64;
17+
}
18+
19+
table Timestamp {
20+
timestamp: uint64;
21+
}
22+
23+
table Configure {
24+
width: int;
25+
height: int;
26+
codec_data: [CodecData];
27+
}
28+
29+
table CursorPosition {
30+
x: int;
31+
y: int;
32+
visible: bool;
33+
}
34+
35+
table CursorImage {
36+
crc32: uint32;
37+
png: [ubyte];
38+
}
39+
40+
table CodecData {
41+
name: string;
42+
data: [ubyte];
43+
}
44+
45+
root_type Packet;
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
// automatically generated by the FlatBuffers compiler, do not modify
2+
3+
package moe.reimu.virtualdisplay
4+
5+
import com.google.flatbuffers.BaseVector
6+
import com.google.flatbuffers.BooleanVector
7+
import com.google.flatbuffers.ByteVector
8+
import com.google.flatbuffers.Constants
9+
import com.google.flatbuffers.DoubleVector
10+
import com.google.flatbuffers.FlatBufferBuilder
11+
import com.google.flatbuffers.FloatVector
12+
import com.google.flatbuffers.LongVector
13+
import com.google.flatbuffers.StringVector
14+
import com.google.flatbuffers.Struct
15+
import com.google.flatbuffers.Table
16+
import com.google.flatbuffers.UnionVector
17+
import java.nio.ByteBuffer
18+
import java.nio.ByteOrder
19+
import kotlin.math.sign
20+
21+
@Suppress("unused")
22+
@kotlin.ExperimentalUnsignedTypes
23+
class Audio : Table() {
24+
25+
fun __init(_i: Int, _bb: ByteBuffer) {
26+
__reset(_i, _bb)
27+
}
28+
fun __assign(_i: Int, _bb: ByteBuffer) : Audio {
29+
__init(_i, _bb)
30+
return this
31+
}
32+
val timestamp : ULong
33+
get() {
34+
val o = __offset(4)
35+
return if(o != 0) bb.getLong(o + bb_pos).toULong() else 0UL
36+
}
37+
companion object {
38+
fun validateVersion() = Constants.FLATBUFFERS_23_1_21()
39+
fun getRootAsAudio(_bb: ByteBuffer): Audio = getRootAsAudio(_bb, Audio())
40+
fun getRootAsAudio(_bb: ByteBuffer, obj: Audio): Audio {
41+
_bb.order(ByteOrder.LITTLE_ENDIAN)
42+
return (obj.__assign(_bb.getInt(_bb.position()) + _bb.position(), _bb))
43+
}
44+
fun createAudio(builder: FlatBufferBuilder, timestamp: ULong) : Int {
45+
builder.startTable(1)
46+
addTimestamp(builder, timestamp)
47+
return endAudio(builder)
48+
}
49+
fun startAudio(builder: FlatBufferBuilder) = builder.startTable(1)
50+
fun addTimestamp(builder: FlatBufferBuilder, timestamp: ULong) = builder.addLong(0, timestamp.toLong(), 0)
51+
fun endAudio(builder: FlatBufferBuilder) : Int {
52+
val o = builder.endTable()
53+
return o
54+
}
55+
}
56+
}
Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
// automatically generated by the FlatBuffers compiler, do not modify
2+
3+
package moe.reimu.virtualdisplay
4+
5+
import com.google.flatbuffers.BaseVector
6+
import com.google.flatbuffers.BooleanVector
7+
import com.google.flatbuffers.ByteVector
8+
import com.google.flatbuffers.Constants
9+
import com.google.flatbuffers.DoubleVector
10+
import com.google.flatbuffers.FlatBufferBuilder
11+
import com.google.flatbuffers.FloatVector
12+
import com.google.flatbuffers.LongVector
13+
import com.google.flatbuffers.StringVector
14+
import com.google.flatbuffers.Struct
15+
import com.google.flatbuffers.Table
16+
import com.google.flatbuffers.UnionVector
17+
import java.nio.ByteBuffer
18+
import java.nio.ByteOrder
19+
import kotlin.math.sign
20+
21+
@Suppress("unused")
22+
@kotlin.ExperimentalUnsignedTypes
23+
class CodecData : Table() {
24+
25+
fun __init(_i: Int, _bb: ByteBuffer) {
26+
__reset(_i, _bb)
27+
}
28+
fun __assign(_i: Int, _bb: ByteBuffer) : CodecData {
29+
__init(_i, _bb)
30+
return this
31+
}
32+
val name : String?
33+
get() {
34+
val o = __offset(4)
35+
return if (o != 0) {
36+
__string(o + bb_pos)
37+
} else {
38+
null
39+
}
40+
}
41+
val nameAsByteBuffer : ByteBuffer get() = __vector_as_bytebuffer(4, 1)
42+
fun nameInByteBuffer(_bb: ByteBuffer) : ByteBuffer = __vector_in_bytebuffer(_bb, 4, 1)
43+
fun data(j: Int) : UByte {
44+
val o = __offset(6)
45+
return if (o != 0) {
46+
bb.get(__vector(o) + j * 1).toUByte()
47+
} else {
48+
0u
49+
}
50+
}
51+
val dataLength : Int
52+
get() {
53+
val o = __offset(6); return if (o != 0) __vector_len(o) else 0
54+
}
55+
val dataAsByteBuffer : ByteBuffer get() = __vector_as_bytebuffer(6, 1)
56+
fun dataInByteBuffer(_bb: ByteBuffer) : ByteBuffer = __vector_in_bytebuffer(_bb, 6, 1)
57+
companion object {
58+
fun validateVersion() = Constants.FLATBUFFERS_23_1_21()
59+
fun getRootAsCodecData(_bb: ByteBuffer): CodecData = getRootAsCodecData(_bb, CodecData())
60+
fun getRootAsCodecData(_bb: ByteBuffer, obj: CodecData): CodecData {
61+
_bb.order(ByteOrder.LITTLE_ENDIAN)
62+
return (obj.__assign(_bb.getInt(_bb.position()) + _bb.position(), _bb))
63+
}
64+
fun createCodecData(builder: FlatBufferBuilder, nameOffset: Int, dataOffset: Int) : Int {
65+
builder.startTable(2)
66+
addData(builder, dataOffset)
67+
addName(builder, nameOffset)
68+
return endCodecData(builder)
69+
}
70+
fun startCodecData(builder: FlatBufferBuilder) = builder.startTable(2)
71+
fun addName(builder: FlatBufferBuilder, name: Int) = builder.addOffset(0, name, 0)
72+
fun addData(builder: FlatBufferBuilder, data: Int) = builder.addOffset(1, data, 0)
73+
fun createDataVector(builder: FlatBufferBuilder, data: UByteArray) : Int {
74+
builder.startVector(1, data.size, 1)
75+
for (i in data.size - 1 downTo 0) {
76+
builder.addByte(data[i].toByte())
77+
}
78+
return builder.endVector()
79+
}
80+
fun startDataVector(builder: FlatBufferBuilder, numElems: Int) = builder.startVector(1, numElems, 1)
81+
fun endCodecData(builder: FlatBufferBuilder) : Int {
82+
val o = builder.endTable()
83+
return o
84+
}
85+
}
86+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
// automatically generated by the FlatBuffers compiler, do not modify
2+
3+
package moe.reimu.virtualdisplay
4+
5+
@Suppress("unused")
6+
@kotlin.ExperimentalUnsignedTypes
7+
class Command private constructor() {
8+
companion object {
9+
const val NONE: UByte = 0u
10+
const val Video: UByte = 1u
11+
const val Audio: UByte = 2u
12+
const val Timestamp: UByte = 3u
13+
const val Configure: UByte = 4u
14+
const val CursorPosition: UByte = 5u
15+
const val CursorImage: UByte = 6u
16+
}
17+
}
Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
// automatically generated by the FlatBuffers compiler, do not modify
2+
3+
package moe.reimu.virtualdisplay
4+
5+
import com.google.flatbuffers.BaseVector
6+
import com.google.flatbuffers.BooleanVector
7+
import com.google.flatbuffers.ByteVector
8+
import com.google.flatbuffers.Constants
9+
import com.google.flatbuffers.DoubleVector
10+
import com.google.flatbuffers.FlatBufferBuilder
11+
import com.google.flatbuffers.FloatVector
12+
import com.google.flatbuffers.LongVector
13+
import com.google.flatbuffers.StringVector
14+
import com.google.flatbuffers.Struct
15+
import com.google.flatbuffers.Table
16+
import com.google.flatbuffers.UnionVector
17+
import java.nio.ByteBuffer
18+
import java.nio.ByteOrder
19+
import kotlin.math.sign
20+
21+
@Suppress("unused")
22+
@kotlin.ExperimentalUnsignedTypes
23+
class Configure : Table() {
24+
25+
fun __init(_i: Int, _bb: ByteBuffer) {
26+
__reset(_i, _bb)
27+
}
28+
fun __assign(_i: Int, _bb: ByteBuffer) : Configure {
29+
__init(_i, _bb)
30+
return this
31+
}
32+
val width : Int
33+
get() {
34+
val o = __offset(4)
35+
return if(o != 0) bb.getInt(o + bb_pos) else 0
36+
}
37+
val height : Int
38+
get() {
39+
val o = __offset(6)
40+
return if(o != 0) bb.getInt(o + bb_pos) else 0
41+
}
42+
fun codecData(j: Int) : moe.reimu.virtualdisplay.CodecData? = codecData(moe.reimu.virtualdisplay.CodecData(), j)
43+
fun codecData(obj: moe.reimu.virtualdisplay.CodecData, j: Int) : moe.reimu.virtualdisplay.CodecData? {
44+
val o = __offset(8)
45+
return if (o != 0) {
46+
obj.__assign(__indirect(__vector(o) + j * 4), bb)
47+
} else {
48+
null
49+
}
50+
}
51+
val codecDataLength : Int
52+
get() {
53+
val o = __offset(8); return if (o != 0) __vector_len(o) else 0
54+
}
55+
companion object {
56+
fun validateVersion() = Constants.FLATBUFFERS_23_1_21()
57+
fun getRootAsConfigure(_bb: ByteBuffer): Configure = getRootAsConfigure(_bb, Configure())
58+
fun getRootAsConfigure(_bb: ByteBuffer, obj: Configure): Configure {
59+
_bb.order(ByteOrder.LITTLE_ENDIAN)
60+
return (obj.__assign(_bb.getInt(_bb.position()) + _bb.position(), _bb))
61+
}
62+
fun createConfigure(builder: FlatBufferBuilder, width: Int, height: Int, codecDataOffset: Int) : Int {
63+
builder.startTable(3)
64+
addCodecData(builder, codecDataOffset)
65+
addHeight(builder, height)
66+
addWidth(builder, width)
67+
return endConfigure(builder)
68+
}
69+
fun startConfigure(builder: FlatBufferBuilder) = builder.startTable(3)
70+
fun addWidth(builder: FlatBufferBuilder, width: Int) = builder.addInt(0, width, 0)
71+
fun addHeight(builder: FlatBufferBuilder, height: Int) = builder.addInt(1, height, 0)
72+
fun addCodecData(builder: FlatBufferBuilder, codecData: Int) = builder.addOffset(2, codecData, 0)
73+
fun createCodecDataVector(builder: FlatBufferBuilder, data: IntArray) : Int {
74+
builder.startVector(4, data.size, 4)
75+
for (i in data.size - 1 downTo 0) {
76+
builder.addOffset(data[i])
77+
}
78+
return builder.endVector()
79+
}
80+
fun startCodecDataVector(builder: FlatBufferBuilder, numElems: Int) = builder.startVector(4, numElems, 4)
81+
fun endConfigure(builder: FlatBufferBuilder) : Int {
82+
val o = builder.endTable()
83+
return o
84+
}
85+
}
86+
}
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
// automatically generated by the FlatBuffers compiler, do not modify
2+
3+
package moe.reimu.virtualdisplay
4+
5+
import com.google.flatbuffers.BaseVector
6+
import com.google.flatbuffers.BooleanVector
7+
import com.google.flatbuffers.ByteVector
8+
import com.google.flatbuffers.Constants
9+
import com.google.flatbuffers.DoubleVector
10+
import com.google.flatbuffers.FlatBufferBuilder
11+
import com.google.flatbuffers.FloatVector
12+
import com.google.flatbuffers.LongVector
13+
import com.google.flatbuffers.StringVector
14+
import com.google.flatbuffers.Struct
15+
import com.google.flatbuffers.Table
16+
import com.google.flatbuffers.UnionVector
17+
import java.nio.ByteBuffer
18+
import java.nio.ByteOrder
19+
import kotlin.math.sign
20+
21+
@Suppress("unused")
22+
@kotlin.ExperimentalUnsignedTypes
23+
class CursorImage : Table() {
24+
25+
fun __init(_i: Int, _bb: ByteBuffer) {
26+
__reset(_i, _bb)
27+
}
28+
fun __assign(_i: Int, _bb: ByteBuffer) : CursorImage {
29+
__init(_i, _bb)
30+
return this
31+
}
32+
val crc32 : UInt
33+
get() {
34+
val o = __offset(4)
35+
return if(o != 0) bb.getInt(o + bb_pos).toUInt() else 0u
36+
}
37+
fun png(j: Int) : UByte {
38+
val o = __offset(6)
39+
return if (o != 0) {
40+
bb.get(__vector(o) + j * 1).toUByte()
41+
} else {
42+
0u
43+
}
44+
}
45+
val pngLength : Int
46+
get() {
47+
val o = __offset(6); return if (o != 0) __vector_len(o) else 0
48+
}
49+
val pngAsByteBuffer : ByteBuffer get() = __vector_as_bytebuffer(6, 1)
50+
fun pngInByteBuffer(_bb: ByteBuffer) : ByteBuffer = __vector_in_bytebuffer(_bb, 6, 1)
51+
companion object {
52+
fun validateVersion() = Constants.FLATBUFFERS_23_1_21()
53+
fun getRootAsCursorImage(_bb: ByteBuffer): CursorImage = getRootAsCursorImage(_bb, CursorImage())
54+
fun getRootAsCursorImage(_bb: ByteBuffer, obj: CursorImage): CursorImage {
55+
_bb.order(ByteOrder.LITTLE_ENDIAN)
56+
return (obj.__assign(_bb.getInt(_bb.position()) + _bb.position(), _bb))
57+
}
58+
fun createCursorImage(builder: FlatBufferBuilder, crc32: UInt, pngOffset: Int) : Int {
59+
builder.startTable(2)
60+
addPng(builder, pngOffset)
61+
addCrc32(builder, crc32)
62+
return endCursorImage(builder)
63+
}
64+
fun startCursorImage(builder: FlatBufferBuilder) = builder.startTable(2)
65+
fun addCrc32(builder: FlatBufferBuilder, crc32: UInt) = builder.addInt(0, crc32.toInt(), 0)
66+
fun addPng(builder: FlatBufferBuilder, png: Int) = builder.addOffset(1, png, 0)
67+
fun createPngVector(builder: FlatBufferBuilder, data: UByteArray) : Int {
68+
builder.startVector(1, data.size, 1)
69+
for (i in data.size - 1 downTo 0) {
70+
builder.addByte(data[i].toByte())
71+
}
72+
return builder.endVector()
73+
}
74+
fun startPngVector(builder: FlatBufferBuilder, numElems: Int) = builder.startVector(1, numElems, 1)
75+
fun endCursorImage(builder: FlatBufferBuilder) : Int {
76+
val o = builder.endTable()
77+
return o
78+
}
79+
}
80+
}

0 commit comments

Comments
 (0)