Lire et agir
Connexion et observations
Lire le réseau depuis une application Kotlin/JVM, sans écrire de code natif.
L’entrée conseillée : Nimby.connect
import fr.nimby.sdk.Nimby
import java.nio.file.Path
fun observer(sdk: Path, trainId: Long) {
Nimby.connect(sdk).use { game ->
val train = game.trains.read(trainId)
println(train?.speedMps)
val snapshot = game.snapshot()
println(snapshot.clock?.toInstant())
}
}Sans processId, connect exige un seul jeu ouvert. Game regroupe trains, clock, signals, mods et construction. game.advanced donne accès aux opérations détaillées de NimbyClient sur la même connexion ; ne le fermez pas séparément.
Choisir explicitement le jeu
import fr.nimby.sdk.*
import java.nio.file.Path
fun lireReseau(dll: Path) {
val games = GameProcesses.discover()
require(games.size == 1) { "Choisissez un processus de jeu" }
NimbyClient.open(dll, games.single().pid).use { client ->
val snapshot = client.capture()
snapshot.trains.forEach { train ->
println("${train.name} : ${train.speedKmh ?: "inconnue"} km/h")
}
}
}Passez le chemin réel de la DLL SDK installée. open vérifie la version SDK 0.8.x et l’ABI 2. Si plusieurs jeux sont ouverts, demandez à l’utilisateur de choisir : ne sélectionnez pas le premier silencieusement.
Une capture contient des copies Kotlin
capture(selectedTrainId) retourne trains, voies, gares, signaux, services, quais, occupations et réservations observables. Un identifiant de train optionnel permet de demander son chemin et ses arrêts de ligne. Les résultats restent utilisables après fermeture de la connexion.
null signifie indisponible, pas vide. Certaines listes non optionnelles du client sont toutefois normalisées à emptyList lorsque leur table native est indisponible : n’utilisez pas leur absence pour prouver que le monde est vide. Une capture externe ne garantit pas un tick atomique du jeu.