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، یعنی همان نما.

گرفتن توکن از سرور شما

کیت هرگز رمزی نگه نمی‌دارد. مسیر توکن سرور خودتان و سرخطی را که نشست بازیکن را انتقال می‌دهد به آن بدهید تا کیت هر بار که به توکن ضرورت دارد به آن درخواست بفرستد. سرور شما با یک کیت سرور توکن صادر می‌کند و با توکن و زمان انقضای آن پاسخ می‌دهد.

خالی کردن رویدادها در حلقهٔ رندر

هسته ورودی/خروجی شبکهٔ خود را روی رشتهٔ اجرایی خودش اجرا می‌کند و هرگز کود شما را فراخوانی نمی‌کند. در حلقهٔ رندر، روی رشتهٔ اجرایی بازی، آنچه رسیده را خالی کنید، حداکثر 256 رویداد در هر بار، و هر کدام را پردازش کنید: یک به‌روزرسانی تمرین، یک پاسخ جریانی NPC، یا یک خطا. در Java، هر رویداد به متود مربوط در visitor شما می‌رود. کیت را در مرحلهٔ dispose بازی خود ببندید، که هسته را متوقف و آزاد می‌کند.

برای اینکه این رویدادها چه چیزی را انتقال می‌دهند، گفتگوی 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();
}