@@ -34,7 +34,6 @@ import solarxr_protocol.rpc.*
3434import kotlin.io.path.Path
3535
3636class 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 }
0 commit comments