NRF SDK 0.9

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.

ObjetResponsabilité
NimbyDécouvrir les parties et ouvrir celle choisie.
GameConserver une connexion et regrouper trains, horloge, signaux, mods et construction.
Observation / DrivingObservationConserver 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

Fonction JVM : chemin du SDK et PID fournis par l’application
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.