pub mod assets;
use bevy_connect::prelude::{Channel, SessionConfig, SessionConnectCommand, SessionOptions};
use bevy_ecs::{system::Commands, world::World};
use tracing::debug;
use crate::{SyncConnectionParameters, networking::assets::AssetMessage, proto::Message};
pub(crate) fn setup_server(cmd: &mut Commands, params: &SyncConnectionParameters) {
match params {
SyncConnectionParameters::Direct {
ip,
port,
asset_port,
} => {
let connect = SessionConnectCommand::<Message>::from_config(SessionConfig::Direct {
addr: Some(*ip),
port: *port,
host: true,
compress: false,
key: None,
options: SessionOptions::default(),
});
let connect_assets =
SessionConnectCommand::<AssetMessage>::from_config(SessionConfig::Direct {
addr: Some(*ip),
port: *asset_port,
host: true,
compress: false,
key: None,
options: SessionOptions::default(),
});
cmd.queue(connect);
cmd.queue(connect_assets);
}
}
}
pub(crate) fn setup_client(cmd: &mut Commands, params: &SyncConnectionParameters) {
match params {
SyncConnectionParameters::Direct {
ip,
port,
asset_port,
} => {
let connect = SessionConnectCommand::<Message>::from_config(SessionConfig::Direct {
addr: Some(*ip),
port: *port,
host: false,
compress: false,
key: None,
options: SessionOptions::default(),
});
let connect_assets =
SessionConnectCommand::<AssetMessage>::from_config(SessionConfig::Direct {
addr: Some(*ip),
port: *asset_port,
host: false,
compress: false,
key: None,
options: SessionOptions::default(),
});
cmd.queue(connect);
cmd.queue(connect_assets);
}
}
}
pub(crate) fn send_message_world(world: &mut World, message: Message) {
let Some(mut channel) = world.get_resource_mut::<Channel<Message>>() else {
debug!("No server or client was available to send a message");
return;
};
channel.broadcast(message);
}