worked on networking
This commit is contained in:
parent
7df4e86afb
commit
c9a7e071cd
8 changed files with 409 additions and 16 deletions
|
|
@ -9,6 +9,9 @@ rand = "0.9.1"
|
|||
# rusqlite = "0.37.0"
|
||||
statrs = "0.18.0"
|
||||
orthros_network = {path = "../orthros-network"}
|
||||
bevy_matchbox = "0.13"
|
||||
bevy_matchbox = {version = "0.13", features= ["signaling"]}
|
||||
serde = { version = "1.0", features = ["derive"] }
|
||||
|
||||
rmp-serde = "1.3.0"
|
||||
[[bin]]
|
||||
name = "orthros-server"
|
||||
|
|
|
|||
|
|
@ -4,17 +4,26 @@ use bevy::{
|
|||
render::{RenderPlugin, settings::WgpuSettings, view::Hdr},
|
||||
time::common_conditions::on_timer,
|
||||
};
|
||||
use bevy_matchbox::prelude::*;
|
||||
use orthros_network::starchart::star::{STARS, StarClass, StarInfo, star_diameter_range};
|
||||
use bevy_matchbox::{matchbox_signaling::SignalingServer, prelude::*};
|
||||
use orthros_network::{
|
||||
generic::EntityID,
|
||||
starchart::star::{STARS, StarClass, StarInfo, star_diameter_range},
|
||||
};
|
||||
use rand::{
|
||||
Rng,
|
||||
distr::{Distribution, Uniform},
|
||||
rng,
|
||||
};
|
||||
use std::time::Duration;
|
||||
use std::{
|
||||
collections::HashSet,
|
||||
net::{Ipv4Addr, SocketAddrV4},
|
||||
time::Duration,
|
||||
};
|
||||
const CHANNEL_ID: usize = 0;
|
||||
#[derive(Component)]
|
||||
struct StarInfoComp(StarInfo);
|
||||
struct NetworkObject;
|
||||
#[derive(Component)]
|
||||
struct Changed;
|
||||
fn main() {
|
||||
App::new()
|
||||
.add_plugins((DefaultPlugins.set(RenderPlugin {
|
||||
|
|
@ -25,7 +34,14 @@ fn main() {
|
|||
.into(),
|
||||
..default()
|
||||
}),))
|
||||
.add_systems(Startup, (setup_scene, start_socket))
|
||||
.add_systems(
|
||||
Startup,
|
||||
(
|
||||
start_signaling_server,
|
||||
start_socket.after(start_signaling_server),
|
||||
setup_scene.after(start_socket),
|
||||
),
|
||||
)
|
||||
.add_systems(
|
||||
Update,
|
||||
(
|
||||
|
|
@ -35,8 +51,29 @@ fn main() {
|
|||
)
|
||||
.run();
|
||||
}
|
||||
fn start_signaling_server(mut commands: Commands) {
|
||||
info!("Starting signaling server");
|
||||
let addr = SocketAddrV4::new(Ipv4Addr::UNSPECIFIED, 3536);
|
||||
let signaling_server = MatchboxServer::from(
|
||||
SignalingServer::client_server_builder(addr)
|
||||
.on_connection_request(|connection| {
|
||||
info!("Connecting: {connection:?}");
|
||||
Ok(true) // Allow all connections
|
||||
})
|
||||
.on_id_assignment(|(socket, id)| info!("{socket} received {id}"))
|
||||
.on_host_connected(|id| info!("Host joined: {id}"))
|
||||
.on_host_disconnected(|id| info!("Host left: {id}"))
|
||||
.on_client_connected(|id| info!("Client joined: {id}"))
|
||||
.on_client_disconnected(|id| info!("Client left: {id}"))
|
||||
.cors()
|
||||
.trace()
|
||||
.build(),
|
||||
);
|
||||
commands.insert_resource(signaling_server);
|
||||
}
|
||||
|
||||
fn setup_scene(mut commands: Commands) {
|
||||
fn setup_scene(mut commands: Commands, mut socket: ResMut<MatchboxSocket>) {
|
||||
let mut spawned_ids: HashSet<u32> = HashSet::new();
|
||||
for _ in 0..4 {
|
||||
let x = Uniform::try_from(-2000..2000).unwrap().sample(&mut rng());
|
||||
let z = Uniform::try_from(-8000..8000).unwrap().sample(&mut rng());
|
||||
|
|
@ -46,22 +83,36 @@ fn setup_scene(mut commands: Commands) {
|
|||
2 => StarClass::GType,
|
||||
_ => todo!(),
|
||||
};
|
||||
let mut id: u32 = rng().random();
|
||||
while spawned_ids.contains(&id) {
|
||||
id = rng().random();
|
||||
}
|
||||
spawned_ids.insert(id);
|
||||
info!("{:?}", star_diameter_range(&star_class));
|
||||
let star_info = StarInfo {
|
||||
id: EntityID(id),
|
||||
name: STARS[(rng().random_range(0..100)) as usize].to_string(),
|
||||
diameter: rng().random_range(star_diameter_range(&star_class)),
|
||||
class: star_class,
|
||||
transform: Transform::from_xyz(x as f32 / 100.0, z as f32 / 20000.0, z as f32 / 100.0),
|
||||
};
|
||||
|
||||
commands.spawn((
|
||||
Transform::from_xyz(x as f32 / 100.0, z as f32 / 20000.0, z as f32 / 100.0),
|
||||
StarInfoComp(star_info),
|
||||
));
|
||||
commands.spawn((StarInfoComp(star_info), NetworkObject, Changed));
|
||||
let peers: Vec<_> = socket.connected_peers().collect();
|
||||
|
||||
for peer in peers {
|
||||
let message = "Hello";
|
||||
info!("Sending message: {message:?} to {peer}");
|
||||
socket
|
||||
.channel_mut(CHANNEL_ID)
|
||||
.send(message.as_bytes().into(), peer);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn on_client_connect(mut socket: ResMut<MatchboxSocket>, Query<&StarInfo>)
|
||||
fn start_socket(mut commands: Commands) {
|
||||
let socket = MatchboxSocket::new_reliable("ws://localhost:3536/hello");
|
||||
info!("Created socket");
|
||||
commands.insert_resource(socket);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue