Lingara Lingara Documentatie Gidsen API Bibliotheken Apps Bouwen Insluiten Webapp
Taal: Nederlands

JVM en Android

Deze pagina is vertaald uit het Engels. Als de twee verschillen, is de Engelse pagina juist. Lees de Engelse pagina

De Kotlin-spelerkit draait op de JVM, op de desktop en op Android. Java-games gebruiken dezelfde kit via de Java-facade ervan. De voorbeelden volgen een libGDX-game, waarvan de renderlus een natuurlijke plek is om events leeg te halen, en dezelfde aanroepen passen in elke gamelus.

De kit en de native bibliotheken toevoegen

De kit en de native bibliotheken zijn aparte artefacten op Maven Central, dus voeg ze allebei toe. Een desktopgame voegt lingara-embed-natives-desktop toe, dat de bibliotheken voor Windows, macOS en Linux bevat. Een Android-module voegt in plaats daarvan lingara-embed-natives-android toe, een AAR. In een libGDX-project gaan de desktopbibliotheken in de desktopmodule en de Android-bibliotheken in de Android-module.

Een Kotlin-game is afhankelijk van lingara-embed-kotlin, een Java-game van lingara-embed-java, de facade.

Tokens van je server krijgen

De kit bewaart nooit een secret. Geef hem de tokenroute van je eigen server en de header die de sessie van de speler draagt, en de kit doet er een POST naartoe wanneer hij een token nodig heeft. Je server geeft het uit met een serverkit en antwoordt met het token en de vervaltijd.

Events leeghalen in je renderlus

De kern voert zijn netwerk-I/O uit op een eigen thread en roept nooit jouw code aan. Haal in je renderlus, op de gamethread, leeg wat er is binnengekomen, maximaal 256 events tegelijk, en handel elk af: een oefenupdate, een gestreamd NPC-antwoord, een fout. In Java gaat elk event naar de bijbehorende methode van je visitor. Sluit de kit in de dispose-stap van je game, die de kern stopt en vrijgeeft.

Zie NPC-dialoog en oefenresultaten voor wat die events bevatten.

Taal van het codevoorbeeld

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>
Taal van het codevoorbeeld

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();
Taal van het codevoorbeeld

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();
}