networking orientated java core library for the tottori minecraft server network
Find a file
kento2 025f0363b9 .
2025-12-07 02:02:23 +01:00
.idea . 2025-12-04 16:06:54 +01:00
gradle/wrapper . 2025-12-04 16:06:45 +01:00
src/main/java/de/kentoj/tottorinetworkcore . 2025-12-07 02:02:23 +01:00
.env . 2025-12-05 07:04:05 +01:00
.gitignore . 2025-12-04 16:06:45 +01:00
build.gradle.kts . 2025-12-05 20:39:57 +01:00
gradlew . 2025-12-04 16:06:45 +01:00
gradlew.bat . 2025-12-04 16:06:45 +01:00
README.md . 2025-12-07 02:02:23 +01:00
settings.gradle.kts . 2025-12-04 16:06:45 +01:00

docker run -it --rm --name tottori-rabbitmq -p 5672:5672 rabbitmq:4.2.0-alpine

rpc

object Balance {
    object Get : RpcType<UUID, Double> {
        override val topic = "balance"
        override val rpcName = "get"

        override val requestMapper = DataMapper({
            UUID.fromString(getValue("uuid").asString)
        }, {
            mapOf("uuid" to JsonPrimitive(this.toString()))
        })

        override val responseMapper = DataMapper({
            getValue("amount").asDouble
        }, {
            mapOf("amount" to JsonPrimitive(this))
        })
    }
}

suspend fun main() {
    val rpcService: RepoRpcService = /* TODO */;
    
    // handle Balance.Get call
    rpcService[Balance.Get] = {
        Random.nextDouble(0.0, 100.0)
    }

    // call Balance.Get with uuid as parameter to receive Result<Double>
    val balance = rpcService.call(Balance.Get, uuid)
    println("balance: ${balanceOld.getOrThrow()}")
}

RepoSpcService#call does not support multiple parameters, so multiple parameters must be wrapped in a data class like

data class Params(val uuid: UUID, val amount: Double)

to set Balance. Also the RpcType implementation gets a little more complex of course.

TODO

  • support multiple workers on one topic in RPC/MessageService
    • do not use one exchange with n queues for each subscriber but just one queue