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