11use crate :: {
22 error:: NetworkError ,
3- network_node:: { NetworkAddress , NetworkEvent , NetworkPeer } ,
4- } ;
5- use bevy:: {
6- ecs:: component:: { ComponentHooks , HookContext , Immutable , StorageType } ,
7- prelude:: * ,
3+ network_node:: { NetworkAddress , NetworkEvent , NetworkPeer , NodeEvent } ,
84} ;
5+ use bevy:: { ecs:: component:: { Immutable , StorageType } , prelude:: * } ;
96
107pub ( super ) fn plugin ( app : & mut App ) {
118 app. register_type :: < ReconnectSetting > ( )
12- . add_event :: < StartClient > ( )
139 . add_systems ( Update , handle_reconnect_timer)
1410 . add_observer ( cleanup_client_session)
1511 . add_observer ( client_reconnect) ;
@@ -25,15 +21,18 @@ impl<T: NetworkAddress + 'static> Component for ClientNode<T> {
2521 const STORAGE_TYPE : StorageType = StorageType :: Table ;
2622 type Mutability = Immutable ;
2723
28- fn register_component_hooks ( hooks : & mut ComponentHooks ) {
29- hooks. on_insert ( |mut world, HookContext { entity, .. } | {
24+ fn on_insert ( ) -> Option < bevy:: ecs:: lifecycle:: ComponentHook > {
25+ Some ( |mut world, ctx| {
26+ let entity = ctx. entity ;
3027 world. commands ( ) . entity ( entity) . insert ( ClientTag ) ;
31- world. trigger_targets ( StartClient , entity) ;
32- } ) ;
28+ world. trigger ( StartClient { entity } ) ;
29+ } )
3330 }
3431}
35- #[ derive( Event , Clone ) ]
36- pub struct StartClient ;
32+ #[ derive( EntityEvent , Clone ) ]
33+ pub struct StartClient {
34+ pub entity : Entity ,
35+ }
3736
3837#[ derive( Debug , Component , Reflect ) ]
3938#[ reflect( Component ) ]
@@ -55,12 +54,13 @@ impl Default for ReconnectSetting {
5554}
5655
5756pub ( crate ) fn client_reconnect (
58- trigger : Trigger < NetworkEvent > ,
57+ on : On < NodeEvent > ,
5958 mut commands : Commands ,
6059 mut q_net : Query < & mut ReconnectSetting , Without < NetworkPeer > > ,
6160) {
62- if let Ok ( mut reconnect) = q_net. get_mut ( trigger. target ( ) ) {
63- let event = trigger. event ( ) ;
61+ let ev = on. event ( ) ;
62+ if let Ok ( mut reconnect) = q_net. get_mut ( ev. entity ) {
63+ let event = & ev. event ;
6464 if reconnect. retries < reconnect. max_retries {
6565 reconnect. retries += 1 ;
6666 } else {
@@ -70,7 +70,7 @@ pub(crate) fn client_reconnect(
7070 NetworkEvent :: Listen | NetworkEvent :: Connected => reconnect. retries = 0 ,
7171 NetworkEvent :: Disconnected | NetworkEvent :: Error ( NetworkError :: Connection ( _) ) => {
7272 commands
73- . entity ( trigger . target ( ) )
73+ . entity ( ev . entity )
7474 . insert ( ReconnectTimer ( Timer :: from_seconds (
7575 reconnect. delay ,
7676 TimerMode :: Once ,
@@ -92,18 +92,19 @@ pub(crate) fn handle_reconnect_timer(
9292 for ( entity, mut timer) in q_reconnect. iter_mut ( ) {
9393 if timer. tick ( time. delta ( ) ) . just_finished ( ) {
9494 commands. entity ( entity) . remove :: < ReconnectTimer > ( ) ;
95- commands. trigger_targets ( StartClient , entity) ;
95+ commands. trigger ( StartClient { entity } ) ;
9696 }
9797 }
9898}
9999
100100pub ( crate ) fn cleanup_client_session (
101- trigger : Trigger < NetworkEvent > ,
101+ on : On < NodeEvent > ,
102102 mut commands : Commands ,
103103 q_net : Query < Entity , With < NetworkPeer > > ,
104104) {
105- if let Ok ( entity) = q_net. get ( trigger. target ( ) ) {
106- let event = trigger. event ( ) ;
105+ let ev = on. event ( ) ;
106+ if let Ok ( entity) = q_net. get ( ev. entity ) {
107+ let event = & ev. event ;
107108
108109 match event {
109110 NetworkEvent :: Disconnected | NetworkEvent :: Error ( NetworkError :: Connection ( _) ) => {
0 commit comments