Skip to content

Commit

Permalink
support finished initial sync
Browse files Browse the repository at this point in the history
  • Loading branch information
raffaeleragni committed Oct 4, 2024
1 parent 8e87dc7 commit 235ed4d
Show file tree
Hide file tree
Showing 7 changed files with 44 additions and 1 deletion.
30 changes: 30 additions & 0 deletions src/client/initial_sync.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
use bevy::prelude::*;
use bevy_renet::renet::{DefaultChannel, RenetClient};

use crate::{full_sync::build_full_sync, proto::Message};

pub(crate) fn send_initial_sync(world: &mut World) {
info!("Sending initial sync to server");
// exclusive access to world while looping through all objects, this can be blocking/freezing for the server
let mut initial_sync = match build_full_sync(world) {
Ok(initial_sync) => initial_sync,
Err(err) => {
warn!("Failed initial sync to server because {}", err);
return;
}
};
let mut client = world.resource_mut::<RenetClient>();
debug!("Initial sync(client) size: {}", initial_sync.len());
for msg in initial_sync.drain(..) {
let Ok(msg_bin) = bincode::serialize(&msg) else {
warn!("Could not deserialize {:?}", msg);
continue;
};
client.send_message(DefaultChannel::ReliableOrdered, msg_bin);
}
let Ok(msg_bin) = bincode::serialize(&Message::FinishedInitialSync) else {
warn!("Could not deserialize FinishedInitialSync");
return;
};
client.send_message(DefaultChannel::ReliableOrdered, msg_bin);
}
2 changes: 2 additions & 0 deletions src/client/mod.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
use bevy::prelude::*;
use bevy_renet::renet::{transport::NetcodeClientTransport, DefaultChannel, RenetClient};
use initial_sync::send_initial_sync;

use crate::{
lib_priv::{sync_audio_enabled, sync_material_enabled, sync_mesh_enabled, SyncTrackerRes},
Expand All @@ -13,6 +14,7 @@ use self::track::{
react_on_changed_materials, react_on_changed_meshes,
};

mod initial_sync;
mod receiver;
mod track;

Expand Down
1 change: 1 addition & 0 deletions src/client/receiver.rs
Original file line number Diff line number Diff line change
Expand Up @@ -135,5 +135,6 @@ fn client_received_a_message(
}
// Nothing to do, only servers send initial sync
Message::RequestInitialSync => {}
Message::FinishedInitialSync => {}
}
}
3 changes: 3 additions & 0 deletions src/logging.rs
Original file line number Diff line number Diff line change
Expand Up @@ -69,5 +69,8 @@ pub(crate) fn log_message_received(from: Who, message: &Message) {
"Received a request for initial sync from client_id: {:?}",
from
),
Message::FinishedInitialSync => {
debug!("Received FinishedInitialSync from client_id: {:?}", from)
}
}
}
1 change: 1 addition & 0 deletions src/proto.rs
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@ pub(crate) enum Message {
params: SyncConnectionParameters,
} = 11,
RequestInitialSync = 12,
FinishedInitialSync = 13,
}

#[derive(Event)]
Expand Down
7 changes: 6 additions & 1 deletion src/server/initial_sync.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
use bevy::prelude::*;
use bevy_renet::renet::{ClientId, DefaultChannel, RenetServer};

use crate::full_sync::build_full_sync;
use crate::{full_sync::build_full_sync, proto::Message};

pub(crate) fn send_initial_sync(client_id: ClientId, world: &mut World) {
info!("Sending initial sync to client id {}", client_id);
Expand All @@ -25,4 +25,9 @@ pub(crate) fn send_initial_sync(client_id: ClientId, world: &mut World) {
};
server.send_message(client_id, DefaultChannel::ReliableOrdered, msg_bin);
}
let Ok(msg_bin) = bincode::serialize(&Message::FinishedInitialSync) else {
warn!("Could not deserialize FinishedInitialSync");
return;
};
server.send_message(client_id, DefaultChannel::ReliableOrdered, msg_bin);
}
1 change: 1 addition & 0 deletions src/server/receiver.rs
Original file line number Diff line number Diff line change
Expand Up @@ -182,6 +182,7 @@ fn server_received_a_message(
debug!("Sending initial sync to client id: {}", client_id);
cmd.add(move |world: &mut World| send_initial_sync(client_id, world));
}
Message::FinishedInitialSync => (),
}
}

Expand Down

0 comments on commit 235ed4d

Please sign in to comment.