mod.rs

 1mod component_connection;
 2
 3use bevy_ecs::{resource::Resource, world::{FromWorld, World}};
 4use bevy_tokio_tasks::TokioTasksRuntime;
 5use futures::{stream::SplitSink, stream::SplitStream, StreamExt};
 6use tokio_xmpp::{connect::TcpServerConnector, Component, Stanza};
 7
 8pub use component_connection::{ComponentConfig, IncomingStanza};
 9
10#[derive(Resource)]
11pub struct XmppComponent {
12    pub reader: SplitStream<Component<TcpServerConnector>>,
13    pub writer: SplitSink<Component<TcpServerConnector>, Stanza>,
14}
15
16impl FromWorld for XmppComponent {
17    fn from_world(world: &mut World) -> Self {
18        let Some(tokio_tasks) = world.get_resource_mut::<TokioTasksRuntime>() else {
19            panic!("Expected a TokioTasksRuntime, but it's not there")
20        };
21        let conn = tokio_tasks.runtime().block_on(async move {
22            Component::new("sgxbwmsgsv2.localhost", "secret")
23                .await
24                .unwrap()
25        });
26        let (writer, reader) = conn.split();
27        XmppComponent { reader, writer }
28    }
29}