Bevy
यह पेज अंग्रेज़ी से अनुवादित है। अगर दोनों में अंतर हो, तो अंग्रेज़ी पेज सही है। अंग्रेज़ी पेज पढ़ें
bevy_lingara Lingara के प्लेयर कोर पर बना एक Bevy प्लगइन है। इसे अपने ऐप में जोड़ें, उसे बताएँ कि टोकन के लिए आपके सर्वर तक कैसे पहुँचना है, और Lingara जो भेजता है उसे सामान्य Bevy Messages के रूप में पढ़ें।
प्लगइन जोड़ें
क्रेट को अपने गेम में जोड़ें, फिर LingaraPlugin को एक LingaraConfig के साथ अपने ऐप में जोड़ें।
अपने सर्वर से टोकन पाएँ
प्लगइन कभी कोई सीक्रेट नहीं रखता। जब उसे टोकन चाहिए होता है, तो वह आपके अपने सर्वर से माँगता है, जो सर्वर किट से एक टोकन मिंट करता है और टोकन तथा उसकी समाप्ति के साथ जवाब देता है।
जवाब देने के दो तरीके हैं। सामान्य स्थिति में, कॉन्फ़िग को अपने सर्वर का टोकन रूट और वह कोई भी हेडर दें जिसकी आपके सेशन को ज़रूरत है, और प्लगइन आपके लिए उसे कॉल करता है। या रूट को सेट न करें और हर LingaraTokenNeeded Message का जवाब स्वयं एक ProvideToken से दें, उसी साइन-इन का उपयोग करते हुए जो आपके गेम में पहले से है।
हर फ़्रेम में एक बार इवेंट पढ़ें
कोर अपना नेटवर्क I/O अपने ही थ्रेड पर चलाता है और कभी आपके कोड को कॉल नहीं करता। प्लगइन हर फ़्रेम में एक बार अपनी कतार खाली करता है और जो कुछ आया है उसे ऐसे Messages में बदल देता है जिन्हें आपके सिस्टम किसी भी अन्य Message की तरह पढ़ते हैं:
LingaraEventReceivedखिलाड़ी के बारे में किसी इवेंट के लिए, जैसे किसी पाठ योजना का तैयार हो जाना;NpcTranscript, हर किरदार पर एक कंपोनेंट जो जवाब के स्ट्रीम होते समय बढ़ता जाता है (देखें NPC संवाद);PracticeFinishedजब कोई अभ्यास सेशन समाप्त होता है (देखें अभ्यास के परिणाम)।
कुछ भी किसी फ़्रेम को नहीं रोकता: धीमा नेटवर्क बस इस रूप में दिखता है कि कोई Message थोड़ी देर से पहुँचता है।
Bevy
cargo add bevy_lingara@0.1.0-alpha.6Bevy
/// 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);
}
}