Skip to content

Commit 9644b00

Browse files
authored
fix: use transaction id in RPC reponses (#1527)
2 parents 543e319 + 0c09c22 commit 9644b00

File tree

3 files changed

+27
-25
lines changed

3 files changed

+27
-25
lines changed

server/core/src/main/java/dev/slimevr/protocol/rpc/RPCHandler.kt

Lines changed: 23 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@ import solarxr_protocol.rpc.*
3434
import kotlin.io.path.Path
3535

3636
class RPCHandler(private val api: ProtocolAPI) : ProtocolHandler<RpcMessageHeader>() {
37-
private var currTransactionId: Long = 0
3837
private val mainScope = CoroutineScope(SupervisorJob())
3938

4039
init {
@@ -238,7 +237,7 @@ class RPCHandler(private val api: ProtocolAPI) : ProtocolHandler<RpcMessageHeade
238237
val localIp = getLocalIp() ?: return
239238
val response = ServerInfosResponse
240239
.createServerInfosResponse(fbb, fbb.createString(localIp))
241-
val outbound = this.createRPCMessage(fbb, RpcMessage.ServerInfosResponse, response)
240+
val outbound = this.createRPCMessage(fbb, RpcMessage.ServerInfosResponse, response, messageHeader)
242241
fbb.finish(outbound)
243242
conn.send(fbb.dataBuffer())
244243
}
@@ -251,7 +250,7 @@ class RPCHandler(private val api: ProtocolAPI) : ProtocolHandler<RpcMessageHeade
251250
val config = api.server.configManager.vrConfig.overlay
252251
val response = OverlayDisplayModeResponse
253252
.createOverlayDisplayModeResponse(fbb, config.isVisible, config.isMirrored)
254-
val outbound = this.createRPCMessage(fbb, RpcMessage.OverlayDisplayModeResponse, response)
253+
val outbound = this.createRPCMessage(fbb, RpcMessage.OverlayDisplayModeResponse, response, messageHeader)
255254
fbb.finish(outbound)
256255
conn.send(fbb.dataBuffer())
257256
}
@@ -283,7 +282,7 @@ class RPCHandler(private val api: ProtocolAPI) : ProtocolHandler<RpcMessageHeade
283282
// might not be a good idea maybe let the client ask again
284283
val fbb = FlatBufferBuilder(300)
285284
val config = createSkeletonConfig(fbb, api.server.humanPoseManager)
286-
val outbound = this.createRPCMessage(fbb, RpcMessage.SkeletonConfigResponse, config)
285+
val outbound = this.createRPCMessage(fbb, RpcMessage.SkeletonConfigResponse, config, messageHeader)
287286
fbb.finish(outbound)
288287
conn.send(fbb.dataBuffer())
289288
}
@@ -297,7 +296,7 @@ class RPCHandler(private val api: ProtocolAPI) : ProtocolHandler<RpcMessageHeade
297296

298297
val fbb = FlatBufferBuilder(300)
299298
val config = createSkeletonConfig(fbb, api.server.humanPoseManager)
300-
val outbound = this.createRPCMessage(fbb, RpcMessage.SkeletonConfigResponse, config)
299+
val outbound = this.createRPCMessage(fbb, RpcMessage.SkeletonConfigResponse, config, messageHeader)
301300
fbb.finish(outbound)
302301
conn.send(fbb.dataBuffer())
303302
}
@@ -332,7 +331,7 @@ class RPCHandler(private val api: ProtocolAPI) : ProtocolHandler<RpcMessageHeade
332331
val fbb = FlatBufferBuilder(40)
333332
val status = RecordBVHStatus
334333
.createRecordBVHStatus(fbb, api.server.bvhRecorder.isRecording)
335-
val outbound = this.createRPCMessage(fbb, RpcMessage.RecordBVHStatus, status)
334+
val outbound = this.createRPCMessage(fbb, RpcMessage.RecordBVHStatus, status, messageHeader)
336335
fbb.finish(outbound)
337336
conn.send(fbb.dataBuffer())
338337
}
@@ -343,7 +342,7 @@ class RPCHandler(private val api: ProtocolAPI) : ProtocolHandler<RpcMessageHeade
343342
val fbb = FlatBufferBuilder(40)
344343
val status = RecordBVHStatus
345344
.createRecordBVHStatus(fbb, api.server.bvhRecorder.isRecording)
346-
val outbound = this.createRPCMessage(fbb, RpcMessage.RecordBVHStatus, status)
345+
val outbound = this.createRPCMessage(fbb, RpcMessage.RecordBVHStatus, status, messageHeader)
347346
fbb.finish(outbound)
348347
conn.send(fbb.dataBuffer())
349348
}
@@ -495,13 +494,16 @@ class RPCHandler(private val api: ProtocolAPI) : ProtocolHandler<RpcMessageHeade
495494
}
496495
}
497496

498-
fun createRPCMessage(fbb: FlatBufferBuilder, messageType: Byte, messageOffset: Int): Int {
497+
@JvmOverloads
498+
fun createRPCMessage(fbb: FlatBufferBuilder, messageType: Byte, messageOffset: Int, respondTo: RpcMessageHeader? = null): Int {
499499
val data = IntArray(1)
500500

501501
RpcMessageHeader.startRpcMessageHeader(fbb)
502502
RpcMessageHeader.addMessage(fbb, messageOffset)
503503
RpcMessageHeader.addMessageType(fbb, messageType)
504-
RpcMessageHeader.addTxId(fbb, TransactionId.createTransactionId(fbb, currTransactionId++))
504+
respondTo?.txId()?.let { txId ->
505+
RpcMessageHeader.addTxId(fbb, TransactionId.createTransactionId(fbb, txId.id()))
506+
}
505507
data[0] = RpcMessageHeader.endRpcMessageHeader(fbb)
506508

507509
val messages = MessageBundle.createRpcMsgsVector(fbb, data)
@@ -525,7 +527,7 @@ class RPCHandler(private val api: ProtocolAPI) : ProtocolHandler<RpcMessageHeade
525527
val response = StatusSystemResponseT()
526528
response.currentStatuses = statuses
527529
val offset = StatusSystemResponse.pack(fbb, response)
528-
val outbound = this.createRPCMessage(fbb, RpcMessage.StatusSystemResponse, offset)
530+
val outbound = this.createRPCMessage(fbb, RpcMessage.StatusSystemResponse, offset, messageHeader)
529531
fbb.finish(outbound)
530532
conn.send(fbb.dataBuffer())
531533
}
@@ -557,7 +559,7 @@ class RPCHandler(private val api: ProtocolAPI) : ProtocolHandler<RpcMessageHeade
557559
0f,
558560
)
559561
}
560-
fbb.finish(createRPCMessage(fbb, RpcMessage.HeightResponse, response))
562+
fbb.finish(createRPCMessage(fbb, RpcMessage.HeightResponse, response, messageHeader))
561563
conn.send(fbb.dataBuffer())
562564
}
563565

@@ -572,7 +574,7 @@ class RPCHandler(private val api: ProtocolAPI) : ProtocolHandler<RpcMessageHeade
572574
0,
573575
api.server.configManager.vrConfig.server.useMagnetometerOnAllTrackers,
574576
)
575-
fbb.finish(createRPCMessage(fbb, RpcMessage.MagToggleResponse, response))
577+
fbb.finish(createRPCMessage(fbb, RpcMessage.MagToggleResponse, response, messageHeader))
576578
conn.send(fbb.dataBuffer())
577579
return
578580
}
@@ -584,7 +586,7 @@ class RPCHandler(private val api: ProtocolAPI) : ProtocolHandler<RpcMessageHeade
584586
trackerId,
585587
tracker.config.shouldHaveMagEnabled == true,
586588
)
587-
fbb.finish(createRPCMessage(fbb, RpcMessage.MagToggleResponse, response))
589+
fbb.finish(createRPCMessage(fbb, RpcMessage.MagToggleResponse, response, messageHeader))
588590
conn.send(fbb.dataBuffer())
589591
}
590592

@@ -604,7 +606,7 @@ class RPCHandler(private val api: ProtocolAPI) : ProtocolHandler<RpcMessageHeade
604606
0,
605607
api.server.configManager.vrConfig.server.useMagnetometerOnAllTrackers,
606608
)
607-
fbb.finish(createRPCMessage(fbb, RpcMessage.MagToggleResponse, response))
609+
fbb.finish(createRPCMessage(fbb, RpcMessage.MagToggleResponse, response, messageHeader))
608610
conn.send(fbb.dataBuffer())
609611
}
610612
return
@@ -623,7 +625,7 @@ class RPCHandler(private val api: ProtocolAPI) : ProtocolHandler<RpcMessageHeade
623625
trackerId,
624626
state,
625627
)
626-
fbb.finish(createRPCMessage(fbb, RpcMessage.MagToggleResponse, response))
628+
fbb.finish(createRPCMessage(fbb, RpcMessage.MagToggleResponse, response, messageHeader))
627629
conn.send(fbb.dataBuffer())
628630
return
629631
}
@@ -640,7 +642,7 @@ class RPCHandler(private val api: ProtocolAPI) : ProtocolHandler<RpcMessageHeade
640642
trackerId,
641643
state,
642644
)
643-
fbb.finish(createRPCMessage(fbb, RpcMessage.MagToggleResponse, response))
645+
fbb.finish(createRPCMessage(fbb, RpcMessage.MagToggleResponse, response, messageHeader))
644646
conn.send(fbb.dataBuffer())
645647
}
646648
}
@@ -660,7 +662,7 @@ class RPCHandler(private val api: ProtocolAPI) : ProtocolHandler<RpcMessageHeade
660662

661663
configManager.saveConfig()
662664

663-
sendSettingsChangedResponse(conn)
665+
sendSettingsChangedResponse(conn, messageHeader)
664666
}
665667

666668
private fun onDetectStayAlignedRelaxedPoseRequest(conn: GenericConnection, messageHeader: RpcMessageHeader) {
@@ -692,7 +694,7 @@ class RPCHandler(private val api: ProtocolAPI) : ProtocolHandler<RpcMessageHeade
692694

693695
LogManager.info("[detectStayAlignedRelaxedPose] pose=$pose $relaxedPose")
694696

695-
sendSettingsChangedResponse(conn)
697+
sendSettingsChangedResponse(conn, messageHeader)
696698
}
697699

698700
private fun onResetStayAlignedRelaxedPoseRequest(conn: GenericConnection, messageHeader: RpcMessageHeader) {
@@ -720,13 +722,13 @@ class RPCHandler(private val api: ProtocolAPI) : ProtocolHandler<RpcMessageHeade
720722

721723
LogManager.info("[resetStayAlignedRelaxedPose] pose=$pose")
722724

723-
sendSettingsChangedResponse(conn)
725+
sendSettingsChangedResponse(conn, messageHeader)
724726
}
725727

726-
fun sendSettingsChangedResponse(conn: GenericConnection) {
728+
fun sendSettingsChangedResponse(conn: GenericConnection, messageHeader: RpcMessageHeader?) {
727729
val fbb = FlatBufferBuilder(32)
728730
val settings = RPCSettingsBuilder.createSettingsResponse(fbb, api.server)
729-
val outbound = createRPCMessage(fbb, RpcMessage.SettingsResponse, settings)
731+
val outbound = createRPCMessage(fbb, RpcMessage.SettingsResponse, settings, messageHeader)
730732
fbb.finish(outbound)
731733
conn.send(fbb.dataBuffer())
732734
}

server/core/src/main/java/dev/slimevr/protocol/rpc/settings/RPCSettingsHandler.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ class RPCSettingsHandler(var rpcHandler: RPCHandler, var api: ProtocolAPI) {
3939
}
4040

4141
fun onSettingsRequest(conn: GenericConnection, messageHeader: RpcMessageHeader?) {
42-
rpcHandler.sendSettingsChangedResponse(conn)
42+
rpcHandler.sendSettingsChangedResponse(conn, messageHeader)
4343
}
4444

4545
fun onChangeSettingsRequest(conn: GenericConnection?, messageHeader: RpcMessageHeader) {

server/core/src/main/java/dev/slimevr/protocol/rpc/trackingpause/RPCTrackingPause.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,16 +28,16 @@ class RPCTrackingPause(private val rpcHandler: RPCHandler, private val api: Prot
2828
}
2929
}
3030

31-
private fun getPauseStateResponse(trackingPaused: Boolean): ByteBuffer {
31+
private fun getPauseStateResponse(trackingPaused: Boolean, messageHeader: RpcMessageHeader? = null): ByteBuffer {
3232
val fbb = FlatBufferBuilder(32)
3333
val state = TrackingPauseStateResponse.createTrackingPauseStateResponse(fbb, trackingPaused)
34-
val outbound = rpcHandler.createRPCMessage(fbb, RpcMessage.TrackingPauseStateResponse, state)
34+
val outbound = rpcHandler.createRPCMessage(fbb, RpcMessage.TrackingPauseStateResponse, state, messageHeader)
3535
fbb.finish(outbound)
3636
return fbb.dataBuffer()
3737
}
3838

3939
private fun onTrackingPauseStateRequest(conn: GenericConnection, messageHeader: RpcMessageHeader) {
40-
conn.send(getPauseStateResponse(currentPauseState))
40+
conn.send(getPauseStateResponse(currentPauseState, messageHeader))
4141
}
4242

4343
override fun onTrackingPause(trackingPaused: Boolean) {

0 commit comments

Comments
 (0)