Lire et agir
Connecter une application Kotlin/JVM
Choisir une partie, ouvrir une connexion et lire des copies dont votre application maîtrise la durée de vie.
Choisir le bon environnement
Ce parcours s’adresse aux applications Kotlin/JVM externes : tableaux de bord, diagnostics et recettes de test. Il faut le client JVM du SDK, sa bibliothèque compatible et une partie NIMBY Rails en cours. Un mod chargé dans le jeu utilise les callbacks nimby et leur ToolContext ; il n’ouvre pas cette connexion.
| Objet | Responsabilité |
|---|---|
| Nimby | Découvrir les parties et ouvrir celle choisie. |
| Game | Conserver une connexion et regrouper trains, horloge, signaux, mods et construction. |
| Observation / DrivingObservation | Conserver des valeurs copiées pour les calculer, les comparer ou les afficher. |
Sélectionner et fermer explicitement
Nimby.runningGames() renvoie des GameProcess avec leur pid et leur nom d’exécutable. S’il y en a plusieurs, présentez le choix à l’utilisateur puis passez le PID à Nimby.connect. Sans PID, connect exige exactement une partie découverte ; il ne choisit pas la première. La découverte ne garantit pas que l’ouverture réussira encore quelques instants plus tard.
Gardez Game ouvert pendant la durée d’utilisation de votre écran ou service. use ferme une utilisation ponctuelle, y compris en cas d’exception. Une application longue ferme sa connexion à son arrêt ou lors d’un changement de partie. Game.advanced expose les opérations détaillées sur la même connexion : ne le fermez pas séparément.
Première lecture complète
package wiki.connection
import fr.nimby.sdk.Nimby
import fr.nimby.sdk.TrainQuery
import java.nio.file.Path
fun printTrainSpeeds(sdk: Path, processId: Int) {
Nimby.connect(sdk, processId).use { game ->
val snapshot = game.trains.snapshot(query = TrainQuery(
includeService = false,
includeLocations = false,
))
snapshot.trains.forEach { train ->
// Un zéro de présentation ne prouve pas que le train est arrêté.
val speed = train.speedKmh.takeUnless { train.speedDefaulted }
println("${train.name} : ${speed ?: "inconnue"} km/h")
}
println(game.clock.read()?.toInstant())
}
}
Appelez printTrainSpeeds avec le chemin de la bibliothèque du SDK et le PID choisi. La fonction affiche un nom et une vitesse par train, ou « inconnue » si le jeu n’a pas fourni une mesure fiable. L’horloge est une lecture distincte ; si vous avez besoin de l’heure associée au lot, utilisez snapshot.clock.