Lingara Lingara Documentación Guías API Bibliotecas Apps Crear Integración Aplicación web
Idioma: Español

Bevy

Esta página está traducida del inglés. Si ambas difieren, la página en inglés es la correcta. Leer la página en inglés

bevy_lingara es un plugin de Bevy sobre el núcleo de jugador de Lingara. Añádelo a tu aplicación, indícale cómo llegar a tu servidor para obtener tokens y lee lo que envía Lingara como Messages normales de Bevy.

Añadir el plugin

Añade el crate a tu juego y luego añade LingaraPlugin a tu aplicación con una LingaraConfig.

Obtener tokens de tu servidor

El plugin nunca guarda un secreto. Cuando necesita un token, se lo pide a tu propio servidor, que emite uno con un kit de servidor y responde con el token y su caducidad.

Hay dos formas de responder. En el caso habitual, da a la configuración la ruta de tokens de tu servidor y cualquier cabecera que necesite tu sesión, y el plugin la llama por ti. O deja la ruta sin definir y responde tú mismo a cada Message LingaraTokenNeeded con un ProvideToken, usando el inicio de sesión que ya tenga tu juego.

Leer los eventos una vez por fotograma

El núcleo ejecuta su E/S de red en su propio hilo y nunca llama a tu código. El plugin vacía su cola una vez por fotograma y convierte lo que ha llegado en Messages que tus sistemas leen como cualquier otro:

  • LingaraEventReceived para un evento sobre el jugador, como que un plan de lección esté listo;
  • NpcTranscript, un componente en cada personaje que crece a medida que llega una respuesta en streaming (consulta Diálogo con PNJ);
  • PracticeFinished cuando termina una sesión de práctica (consulta resultados de práctica).

Nada bloquea un fotograma: una red lenta se nota como un Message que llega un poco más tarde.

Bevy

cargo add bevy_lingara@0.1.0-alpha.6

Bevy

/// The common case: the plugin POSTs to your own server's token route, with
/// your game's session as a header, and reads `{token, expires_at}`.
fn lingara_config(session_header: bevy_lingara::lingara_embed::Header) -> LingaraConfig {
    LingaraConfig::new()
        .token_endpoint("https://game.example.com/lingara-token", vec![session_header])
        .source_lang("en")
}

/// Or keep the session in ECS: leave the token endpoint unset, answer each
/// `LingaraTokenNeeded` with what your server returned.
fn answer_token_requests(mut needed: MessageReader<LingaraTokenNeeded>, mut provide: MessageWriter<ProvideToken>) {
    for _request in needed.read() {
        let (token, expires_at) = fetch_from_your_server();
        provide.write(ProvideToken::new(token, expires_at));
    }
}

Bevy

App::new()
    .add_plugins(DefaultPlugins)
    .add_plugins(LingaraPlugin::new(lingara_config(header)))
    .add_systems(Update, on_lingara_event)

/// The plugin drains Lingara's events once per frame: read them as Messages.
fn on_lingara_event(mut events: MessageReader<LingaraEventReceived>) {
    for LingaraEventReceived(event) in events.read() {
        info!("{}: {}", event.event_type, event.data_json);
    }
}