Skip to content

Commit

Permalink
Update to bevy_replicon 0.30.0 (#27)
Browse files Browse the repository at this point in the history
* Update bevy_replicon to 0.30.0

* Add changelog

* Remove unused dep
  • Loading branch information
aecsocket authored Feb 6, 2025
1 parent 9c7e463 commit fb02395
Show file tree
Hide file tree
Showing 20 changed files with 58 additions and 50 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
- Made each crate have its own separate version
- For now, all crates will share the same major and minor version number, but we are now free to bump the patch for individual subcrates
- `aeronet_replicon` properly reports backend statistics to Replicon i.e. RTT, packet loss
- Updated `bevy_replicon` to `0.30.0`

# 0.11.0

Expand Down
6 changes: 4 additions & 2 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -141,4 +141,4 @@ xwt-web-sys = "0.12.0"

# aeronet_replicon

bevy_replicon = { version = "0.29.0", default-features = false }
bevy_replicon = { version = "0.30.0", default-features = false }
3 changes: 1 addition & 2 deletions crates/aeronet_channel/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -148,13 +148,12 @@ fn on_io_added(trigger: Trigger<OnAdd, ChannelIo>, mut commands: Commands) {

fn on_disconnect(trigger: Trigger<Disconnect>, mut sessions: Query<&mut ChannelIo>) {
let entity = trigger.entity();
let Disconnect { reason } = trigger.event();
let Ok(mut io) = sessions.get_mut(entity) else {
return;
};

if let Some(send_dc) = io.send_dc.take() {
_ = send_dc.into_inner().send(reason.clone());
_ = send_dc.into_inner().send(trigger.reason.clone());
}
}

Expand Down
2 changes: 1 addition & 1 deletion crates/aeronet_channel/tests/connection.rs
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ fn events_disconnect() {
let (mut app, a, b) = setup();
app.init_resource::<WhoDisconnected>().add_observer(
|trigger: Trigger<Disconnected>, mut who: ResMut<WhoDisconnected>| {
let reason = match &trigger.event().reason {
let reason = match &trigger.reason {
DisconnectReason::User(reason) => DisconnectReason::User(reason.clone()),
DisconnectReason::Peer(reason) => DisconnectReason::Peer(reason.clone()),
DisconnectReason::Error(_) => panic!("should not disconnect with an error"),
Expand Down
6 changes: 3 additions & 3 deletions crates/aeronet_io/src/connection.rs
Original file line number Diff line number Diff line change
Expand Up @@ -171,13 +171,13 @@ fn on_connected(trigger: Trigger<OnAdd, Session>) {

fn on_disconnect(trigger: Trigger<Disconnect>, mut commands: Commands) {
let entity = trigger.entity();
let reason = DisconnectReason::User(trigger.event().reason.clone());
let reason = DisconnectReason::User(trigger.reason.clone());
commands.trigger_targets(Disconnected { reason }, entity);
}

fn on_disconnected(trigger: Trigger<Disconnected>, mut commands: Commands) {
let entity = trigger.entity();
match &trigger.event().reason {
match &trigger.reason {
DisconnectReason::User(reason) => {
debug!("{entity} disconnected by user: {reason}");
}
Expand Down Expand Up @@ -213,7 +213,7 @@ mod tests {
app.world_mut().entity_mut(entity).observe(
|trigger: Trigger<Disconnected>, mut has_disconnected: ResMut<HasDisconnected>| {
assert!(matches!(
&trigger.event().reason,
&trigger.reason,
DisconnectReason::User(reason) if reason == REASON
));

Expand Down
8 changes: 4 additions & 4 deletions crates/aeronet_io/src/server.rs
Original file line number Diff line number Diff line change
Expand Up @@ -194,7 +194,7 @@ fn on_opened(trigger: Trigger<OnAdd, Server>) {

fn on_close(trigger: Trigger<Close>, mut commands: Commands) {
let server = trigger.entity();
let reason = CloseReason::User(trigger.event().reason.clone());
let reason = CloseReason::User(trigger.reason.clone());
commands.trigger_targets(Closed { reason }, server);
}

Expand All @@ -204,7 +204,7 @@ fn on_closed(trigger: Trigger<Closed>, children: Query<&Children>, mut commands:
.get(server)
.map(|children| children.iter().copied().collect::<Vec<_>>())
.unwrap_or_default();
match &trigger.event().reason {
match &trigger.reason {
CloseReason::User(reason) => {
debug!("{server} closed by user: {reason}");
commands.trigger_targets(Disconnect::new(reason), children);
Expand Down Expand Up @@ -249,7 +249,7 @@ mod tests {
app.world_mut().entity_mut(client).observe(
|trigger: Trigger<Disconnected>, mut has_disconnected: ResMut<HasDisconnected>| {
assert!(matches!(
&trigger.event().reason,
&trigger.reason,
DisconnectReason::User(reason) if reason == REASON
));

Expand All @@ -264,7 +264,7 @@ mod tests {
.observe(
|trigger: Trigger<Closed>, mut has_closed: ResMut<HasClosed>| {
assert!(matches!(
&trigger.event().reason,
&trigger.reason,
CloseReason::User(reason) if reason == REASON
));

Expand Down
33 changes: 24 additions & 9 deletions crates/aeronet_replicon/src/server.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,14 +12,16 @@ use {
AeronetTransportPlugin, Transport, TransportSet,
sampling::{SessionSamplingPlugin, SessionStats, SessionStatsSampling},
},
anyhow::anyhow,
bevy_app::prelude::*,
bevy_ecs::prelude::*,
bevy_hierarchy::Parent,
bevy_reflect::Reflect,
bevy_replicon::{
prelude::{ConnectedClients, RepliconChannels, RepliconServer},
server::{ServerEvent, ServerSet},
server::{ClientConnected, ClientDisconnected, ServerSet},
},
core::mem,
tracing::warn,
};

Expand Down Expand Up @@ -145,7 +147,6 @@ fn on_connected(
sessions: Query<&Session>,
parents: Query<&Parent>,
open_servers: Query<(), OpenedServer>,
mut events: EventWriter<ServerEvent>,
channels: Res<RepliconChannels>,
mut commands: Commands,
) {
Expand All @@ -162,7 +163,7 @@ fn on_connected(
}

let client_id = convert::to_client_id(client);
events.send(ServerEvent::ClientConnected { client_id });
commands.trigger(ClientConnected { client_id });

let recv_lanes = channels
.client_channels()
Expand All @@ -185,13 +186,13 @@ fn on_connected(
}

fn on_disconnected(
trigger: Trigger<Disconnected>,
mut trigger: Trigger<Disconnected>,
// check for `Session` - clients which are already connected
// on the replicon side, because if we disconnect a non-connected client,
// replicon panics
connected_clients: Query<&Parent, With<Session>>,
open_servers: Query<(), OpenedServer>,
mut events: EventWriter<ServerEvent>,
mut commands: Commands,
) {
let client = trigger.entity();
let Ok(server) = connected_clients.get(client).map(Parent::get) else {
Expand All @@ -202,11 +203,25 @@ fn on_disconnected(
}

let client_id = convert::to_client_id(client);
let reason = match &trigger.event().reason {
DisconnectReason::User(reason) | DisconnectReason::Peer(reason) => reason.clone(),
DisconnectReason::Error(err) => format!("{err:#}"),
let reason = match &mut trigger.reason {
DisconnectReason::User(_) => bevy_replicon::core::DisconnectReason::DisconnectedByServer,
DisconnectReason::Peer(_) => bevy_replicon::core::DisconnectReason::DisconnectedByClient,
DisconnectReason::Error(err) => {
// TODO: when we can order observers, make this one run right at the end
// so potential consumers of `Disconnected` never see this dummy error
let err = mem::replace(
err,
anyhow!(
"real disconnect reason was replaced with a dummy value, and was passed to \
`bevy_replicon` - if you want to read the real disconnect reason, access it \
via `bevy_replicon`",
),
);
bevy_replicon::core::DisconnectReason::Backend(err.into())
}
};
events.send(ServerEvent::ClientDisconnected { client_id, reason });

commands.trigger(ClientDisconnected { client_id, reason });
}

fn poll(
Expand Down
3 changes: 1 addition & 2 deletions crates/aeronet_websocket/examples/websocket_client.rs
Original file line number Diff line number Diff line change
Expand Up @@ -66,11 +66,10 @@ fn on_disconnected(
mut ui_state: ResMut<GlobalUi>,
) {
let session = trigger.entity();
let Disconnected { reason } = trigger.event();
let name = names
.get(session)
.expect("our session entity should have a name");
ui_state.log.push(match reason {
ui_state.log.push(match &trigger.reason {
DisconnectReason::User(reason) => {
format!("{name} disconnected by user: {reason}")
}
Expand Down
2 changes: 1 addition & 1 deletion crates/aeronet_websocket/examples/websocket_echo_server.rs
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ fn on_disconnected(trigger: Trigger<Disconnected>, clients: Query<&Parent>) {
return;
};

match &trigger.event().reason {
match &trigger.reason {
DisconnectReason::User(reason) => {
info!("{client} disconnected from {server} by user: {reason}");
}
Expand Down
3 changes: 1 addition & 2 deletions crates/aeronet_websocket/src/session/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -148,13 +148,12 @@ pub(crate) struct SessionFrontend {

fn on_disconnect(trigger: Trigger<Disconnect>, mut sessions: Query<&mut WebSocketIo>) {
let session = trigger.entity();
let Disconnect { reason } = trigger.event();
let Ok(mut io) = sessions.get_mut(session) else {
return;
};

if let Some(send_dc) = io.send_user_dc.take() {
_ = send_dc.send(reason.clone());
_ = send_dc.send(trigger.reason.clone());
}
}

Expand Down
3 changes: 1 addition & 2 deletions crates/aeronet_webtransport/examples/webtransport_client.rs
Original file line number Diff line number Diff line change
Expand Up @@ -71,11 +71,10 @@ fn on_disconnected(
mut ui_state: ResMut<GlobalUi>,
) {
let entity = trigger.entity();
let Disconnected { reason } = trigger.event();
let name = names
.get(entity)
.expect("our session entity should have a name");
ui_state.log.push(match reason {
ui_state.log.push(match &trigger.reason {
DisconnectReason::User(reason) => {
format!("{name} disconnected by user: {reason}")
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -75,11 +75,10 @@ fn on_opened(trigger: Trigger<OnAdd, Server>, servers: Query<&LocalAddr>) {
}

fn on_session_request(
mut trigger: Trigger<SessionRequest>,
mut request: Trigger<SessionRequest>,
clients: Query<&Parent>,
) {
let client = trigger.entity();
let request = trigger.event_mut();
let client = request.entity();
let Ok(server) = clients.get(client).map(Parent::get) else {
return;
};
Expand Down Expand Up @@ -107,7 +106,7 @@ fn on_disconnected(trigger: Trigger<Disconnected>, clients: Query<&Parent>) {
return;
};

match &trigger.event().reason {
match &trigger.reason {
DisconnectReason::User(reason) => {
info!("{client} disconnected from {server} by user: {reason}");
}
Expand Down
7 changes: 3 additions & 4 deletions crates/aeronet_webtransport/src/server/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -154,7 +154,7 @@ pub enum SessionResponse {
///
/// fn on_session_request(mut trigger: Trigger<SessionRequest>) {
/// let client = trigger.entity();
/// trigger.event_mut().respond(SessionResponse::Accepted);
/// trigger.respond(SessionResponse::Accepted);
/// }
/// ```
///
Expand All @@ -166,9 +166,8 @@ pub enum SessionResponse {
/// bevy_ecs::prelude::*,
/// };
///
/// fn on_session_request(mut trigger: Trigger<SessionRequest>) {
/// let client = trigger.entity();
/// let request = trigger.event_mut();
/// fn on_session_request(mut request: Trigger<SessionRequest>) {
/// let client = request.entity();
///
/// let mut response = SessionResponse::Forbidden;
/// if let Some(auth_token) = request.headers.get(":auth-token") {
Expand Down
3 changes: 1 addition & 2 deletions crates/aeronet_webtransport/src/session.rs
Original file line number Diff line number Diff line change
Expand Up @@ -138,13 +138,12 @@ pub(crate) struct SessionMeta {

fn on_disconnect(trigger: Trigger<Disconnect>, mut sessions: Query<&mut WebTransportIo>) {
let session = trigger.entity();
let Disconnect { reason } = trigger.event();
let Ok(mut io) = sessions.get_mut(session) else {
return;
};

if let Some(send_dc) = io.send_user_dc.take() {
_ = send_dc.send(reason.clone());
_ = send_dc.send(trigger.reason.clone());
}
}

Expand Down
2 changes: 1 addition & 1 deletion examples/echo_client/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -170,7 +170,7 @@ fn on_connected(

fn on_disconnected(trigger: Trigger<Disconnected>) {
let entity = trigger.entity();
match &trigger.event().reason {
match &trigger.reason {
DisconnectReason::User(reason) => info!("{entity} disconnected by user: {reason}"),
DisconnectReason::Peer(reason) => info!("{entity} disconnected by peer: {reason}"),
DisconnectReason::Error(err) => warn!("{entity} disconnected due to error: {err:#}"),
Expand Down
2 changes: 1 addition & 1 deletion examples/echo_server/src/server.rs
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,7 @@ fn on_disconnected(trigger: Trigger<Disconnected>, clients: Query<&Parent>) {
return;
};

match &trigger.event().reason {
match &trigger.reason {
DisconnectReason::User(reason) => {
info!("{client} disconnected from {server} by user: {reason}");
}
Expand Down
3 changes: 1 addition & 2 deletions examples/move_box_client/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -120,11 +120,10 @@ fn on_disconnected(
mut game_state: ResMut<NextState<GameState>>,
) {
let session = trigger.entity();
let Disconnected { reason } = trigger.event();
let name = names
.get(session)
.expect("our session entity should have a name");
ui_state.log.push(match reason {
ui_state.log.push(match &trigger.reason {
DisconnectReason::User(reason) => {
format!("{name} disconnected by user: {reason}")
}
Expand Down
7 changes: 3 additions & 4 deletions examples/move_box_server/src/server.rs
Original file line number Diff line number Diff line change
Expand Up @@ -106,9 +106,8 @@ fn web_transport_config(identity: &wtransport::Identity, args: &Args) -> WebTran
.build()
}

fn on_session_request(mut trigger: Trigger<SessionRequest>, clients: Query<&Parent>) {
let client = trigger.entity();
let request = trigger.event_mut();
fn on_session_request(mut request: Trigger<SessionRequest>, clients: Query<&Parent>) {
let client = request.entity();
let Ok(server) = clients.get(client).map(Parent::get) else {
return;
};
Expand Down Expand Up @@ -177,7 +176,7 @@ fn on_disconnected(trigger: Trigger<Disconnected>, clients: Query<&Parent>) {
return;
};

match &trigger.event().reason {
match &trigger.reason {
DisconnectReason::User(reason) => {
info!("{client} disconnected from {server} by user: {reason}");
}
Expand Down
5 changes: 2 additions & 3 deletions old_crates/aeronet_steam/examples/steam_client.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ use aeronet_io::{
};
use aeronet_steam::{client::SteamClient, config::SteamSessionConfig};
use bevy::prelude::*;
use bevy_egui::{egui, EguiContexts, EguiPlugin};
use bevy_egui::{EguiContexts, EguiPlugin, egui};
use bevy_steamworks::SteamworksPlugin;
use steamworks::SteamId;

Expand Down Expand Up @@ -68,9 +68,8 @@ fn on_disconnected(
mut ui_state: ResMut<GlobalUi>,
) {
let session = trigger.entity();
let Disconnected { reason } = trigger.event();
let name = names.get(session).unwrap();
ui_state.log.push(match reason {
ui_state.log.push(match &trigger.reason {
DisconnectReason::User(reason) => {
format!("{name} disconnected by user: {reason}")
}
Expand Down

0 comments on commit fb02395

Please sign in to comment.