godot_tokio

Crates.iogodot_tokio
lib.rsgodot_tokio
version0.1.4
sourcesrc
created_at2024-11-30 17:40:26.138327
updated_at2024-12-06 04:42:17.800719
descriptionThe tokio-async runtime wrapped in a gdextention object to be used as an engine singleton in your gdext project.
homepage
repositoryhttps://github.com/2-3-5-41/godot_tokio
max_upload_size
id1466836
size5,130
(2-3-5-41)

documentation

README

godot_tokio

This was made to prevent re-typing out the boilerplate for creating a tokio runtime godot object.

Example Use snippets

You can simply create an engine singleton that makes the Tokio runtime accessable by all godot objects.

#[gdextension]
unsafe impl ExtensionLibrary for Metaphy {
    fn on_level_init(level: InitLevel) {
        match level {
            InitLevel::Scene => {
                Engine::singleton().register_singleton(AsyncRuntime::SINGLETON, &AsyncRuntime::new_alloc());
            }
            _ => (),
        }
    }

    fn on_level_deinit(level: InitLevel) {
        match level {
            InitLevel::Scene => {
                let mut engine = Engine::singleton();

                if let Some(async_singleton) = engine.get_singleton(AsyncRuntime::SINGLETON) {
                    engine.unregister_singleton(AsyncRuntime::SINGLETON);
                    async_singleton.free();
                } else {
                    godot_warn!(
                        "Failed to find & free singleton -> {}",
                        AsyncRuntime::SINGLETON
                    );
                }
            }
            _ => (),
        }
    }
}

Then you can access the runtime/singleton like other non-builtin engine singletons.

let singleton_access = AsyncRuntime::singleton(); // returns an Option<Gd<AsyncRuntime>> if you need this.
let runtime_access = AsyncRuntime::runtime(); // returns an Option<Rc<Runtime>> if you want to get to the point.
Commit count: 9

cargo fmt