Lingara Lingara Documentation Guides API Bibliothèques Applications Créer Intégration Application web
Langue: Français

JVM et Android

Cette page est traduite de l'anglais. En cas de différence, la page anglaise fait foi. Lire la page en anglais

Le kit joueur Kotlin fonctionne sur la JVM, sur ordinateur et sur Android. Les jeux Java utilisent le même kit via sa façade Java. Les exemples suivent un jeu libGDX, dont la boucle de rendu est un endroit naturel pour vider les événements, et les mêmes appels conviennent à n’importe quelle boucle de jeu.

Ajouter le kit et ses bibliothèques natives

Le kit et ses bibliothèques natives sont des artefacts distincts sur Maven Central : ajoutez donc les deux. Un jeu sur ordinateur ajoute lingara-embed-natives-desktop, qui contient les bibliothèques pour Windows, macOS et Linux. Un module Android ajoute à la place lingara-embed-natives-android, un AAR. Dans un projet libGDX, les bibliothèques natives pour ordinateur vont dans le module desktop et les bibliothèques natives Android dans le module Android.

Un jeu Kotlin dépend de lingara-embed-kotlin ; un jeu Java de lingara-embed-java, la façade.

Obtenir des jetons depuis votre serveur

Le kit ne détient jamais de secret. Donnez-lui la route de jetons de votre propre serveur et l’en-tête qui porte la session du joueur, et le kit y envoie une requête chaque fois qu’il a besoin d’un jeton. Votre serveur émet le jeton avec un kit serveur et répond avec le jeton et son expiration.

Vider les événements dans votre boucle de rendu

Le cœur exécute ses E/S réseau sur son propre thread et n’appelle jamais votre code. Dans votre boucle de rendu, sur le thread du jeu, videz ce qui est arrivé, au plus 256 événements à la fois, et traitez chacun : une mise à jour de pratique, une réponse de PNJ en flux, une erreur. En Java, chaque événement est transmis à la méthode correspondante de votre visiteur. Fermez le kit lors de l’étape de libération de votre jeu, ce qui arrête le cœur et le libère.

Consultez Dialogue de PNJ et résultats de pratique pour savoir ce que contiennent ces événements.

Langage de l'exemple de code

Kotlin

// The kit, and the natives for the platform: natives-desktop in a libGDX lwjgl3 module, natives-android in its android module.
implementation("com.getlingara:lingara-embed-kotlin:0.1.0-alpha.6")
implementation("com.getlingara:lingara-embed-natives-desktop:0.1.0-alpha.6")

Java

<!-- The kit, and the natives for the platform (lingara-embed-natives-android in an Android module). -->
<dependency>
  <groupId>com.getlingara</groupId>
  <artifactId>lingara-embed-java</artifactId>
  <version>0.1.0-alpha.6</version>
</dependency>
<dependency>
  <groupId>com.getlingara</groupId>
  <artifactId>lingara-embed-natives-desktop</artifactId>
  <version>0.1.0-alpha.6</version>
</dependency>
Langage de l'exemple de code

Kotlin

// Your server mints the embed token; the kit POSTs {} here whenever it needs one.
private val lingara =
    LingaraEmbed.start(
        EmbedConfig(
            tokenSource =
                TokenSourceConfig.Http(
                    url = "https://my-game.example/lingara/token",
                    headers = listOf(Header("Authorization", Secret("Bearer $session"))),
                ),
            userAgentSuffix = "my-game/1.4",
        ),
    )

Java

// Your server mints the embed token; the kit POSTs {} here whenever it needs one.
lingara =
    LingaraEmbedJava.builder()
        .httpTokenSource(
            "https://my-game.example/lingara/token",
            Map.of("Authorization", "Bearer " + session))
        .userAgentSuffix("my-game/1.4")
        .build();
Langage de l'exemple de code

Kotlin

// In render(), on the game thread: one crossing, at most 256 events.
fun render() {
    lingara.drain(256) { event ->
        when (event) {
            is EmbedEvent.Practice -> showPractice(event.snapshot.question?.prompt)
            is EmbedEvent.NpcTurn -> onNpcTurn(event.update)
            is EmbedEvent.Error -> println("Lingara error: ${event.error.message}")
            else -> Unit
        }
    }
}

// In dispose(): stops the core and frees it.
fun dispose() {
    lingara.close()
}

Java

// In render(), on the game thread: one crossing, at most 256 events, each to its visitor method.
void render() {
  lingara.drain(256, event -> LingaraEmbedJava.visit(event, visitor));
}

// In dispose(), or let try-with-resources do it.
@Override
public void close() {
  lingara.close();
}