Lingara Lingara दस्तावेज़ मार्गदर्शिकाएँ API लाइब्रेरी ऐप बनाएं एम्बेड वेब ऐप
भाषा: हिन्दी

JVM और Android

यह पेज अंग्रेज़ी से अनुवादित है। अगर दोनों में अंतर हो, तो अंग्रेज़ी पेज सही है। अंग्रेज़ी पेज पढ़ें

Kotlin प्लेयर किट JVM पर, डेस्कटॉप पर और Android पर चलता है। Java गेम इसी किट का उपयोग उसके Java फ़साड के ज़रिए करते हैं। सैंपल एक libGDX गेम का अनुसरण करते हैं, जिसका रेंडर लूप इवेंट खाली करने के लिए एक स्वाभाविक जगह है, और यही कॉल किसी भी गेम लूप में फिट होते हैं।

किट और उसकी नेटिव लाइब्रेरी जोड़ें

किट और उसकी नेटिव लाइब्रेरी Maven Central पर अलग-अलग आर्टिफ़ैक्ट हैं, इसलिए दोनों जोड़ें। डेस्कटॉप गेम lingara-embed-natives-desktop जोड़ता है, जिसमें Windows, macOS और Linux के लिए लाइब्रेरी होती हैं। Android मॉड्यूल इसके बजाय lingara-embed-natives-android, एक AAR, जोड़ता है। किसी libGDX प्रोजेक्ट में, डेस्कटॉप नेटिव डेस्कटॉप मॉड्यूल में जाते हैं और Android नेटिव Android मॉड्यूल में।

Kotlin गेम lingara-embed-kotlin पर निर्भर करता है; Java गेम lingara-embed-java, यानी फ़साड, पर।

अपने सर्वर से टोकन पाएँ

किट कभी कोई सीक्रेट नहीं रखता। उसे अपने सर्वर का टोकन रूट और वह हेडर दें जो खिलाड़ी का सेशन ले जाता है, और जब भी किट को टोकन चाहिए होता है, वह उस पर पोस्ट करता है। आपका सर्वर सर्वर किट से मिंट करता है और टोकन तथा उसकी समाप्ति के साथ जवाब देता है।

अपने रेंडर लूप में इवेंट खाली करें

कोर अपना नेटवर्क I/O अपने ही थ्रेड पर चलाता है और कभी आपके कोड को कॉल नहीं करता। अपने रेंडर लूप में, गेम थ्रेड पर, जो कुछ आ चुका है उसे खाली करें, एक बार में अधिकतम 256 इवेंट, और हर एक को संभालें: अभ्यास अपडेट, स्ट्रीम किया गया NPC जवाब, कोई त्रुटि। Java में, हर इवेंट आपके विज़िटर की संबंधित मेथड पर जाता है। अपने गेम के डिस्पोज़ चरण में किट को बंद करें, जो कोर को रोकता है और उसे मुक्त करता है।

इन इवेंट में क्या आता है, यह जानने के लिए NPC संवाद और अभ्यास के परिणाम देखें।

कोड उदाहरण की भाषा

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>
कोड उदाहरण की भाषा

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();
कोड उदाहरण की भाषा

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