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}