Lingara Lingara Documentação Guias API Bibliotecas Aplicações Criar Incorporar Aplicação web
Idioma: Português

Bevy

Esta página é uma tradução do inglês. Se as duas diferirem, a página em inglês é a correta. Ler a página em inglês

bevy_lingara é um plugin do Bevy sobre o núcleo de jogador do Lingara. Adicione-o à sua aplicação, indique-lhe como chegar ao seu servidor para obter tokens e leia o que o Lingara envia como Messages normais do Bevy.

Adicionar o plugin

Adicione a crate ao seu jogo e, em seguida, adicione LingaraPlugin à sua aplicação com uma LingaraConfig.

Obter tokens do seu servidor

O plugin nunca guarda um segredo. Quando precisa de um token, pede-o ao seu próprio servidor, que emite um com um kit de servidor e responde com o token e a sua validade.

Há duas formas de responder. No caso habitual, indique na configuração a rota de tokens do seu servidor e qualquer cabeçalho de que a sua sessão precise, e o plugin chama-a por si. Ou deixe a rota por definir e responda por si a cada Message LingaraTokenNeeded com um ProvideToken, usando o início de sessão que o seu jogo já tem.

Ler os eventos uma vez por frame

O núcleo executa a sua E/S de rede no seu próprio thread e nunca chama o seu código. O plugin esvazia a sua fila uma vez por frame e transforma o que chegou em Messages que os seus sistemas leem como quaisquer outras:

  • LingaraEventReceived para um evento sobre o jogador, como um plano de lição que fica pronto;
  • NpcTranscript, um componente em cada personagem que cresce à medida que uma resposta chega em streaming (consulte Diálogo com NPC);
  • PracticeFinished quando termina uma sessão de prática (consulte resultados da prática).

Nada bloqueia um frame: uma rede lenta traduz-se numa Message que chega um pouco mais 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);
    }
}