pub struct NetResource { /* private fields */ }Expand description
Bevy resource that owns the networking transport and packet queues.
Implementations§
Source§impl NetResource
impl NetResource
Sourcepub fn join_server(&mut self, server_address: String)
pub fn join_server(&mut self, server_address: String)
Connects to a server and binds packet handlers to the new socket.
Examples found in repository?
103fn setup(mut net: ResMut<NetResource>, mode: Res<DemoMode>) {
104 match mode.0 {
105 Mode::Server => {
106 net.start_server(5002);
107 println!("server listening on {ADDRESS}");
108 }
109 Mode::Client => {
110 net.join_server(ADDRESS.to_string());
111 println!("client connected to {ADDRESS}");
112 }
113 }
114}More examples
55fn setup(mut commands: Commands, mut net: ResMut<NetResource>, mode: Res<DemoMode>) {
56 match mode.0 {
57 Mode::Server => {
58 net.start_server(5001);
59 println!("server listening on {ADDRESS}");
60 commands.spawn((
61 Replicated,
62 Position(Vec2::ZERO),
63 Health(100),
64 ));
65 }
66 Mode::Client => {
67 net.join_server(ADDRESS.to_string());
68 println!("client connected to {ADDRESS}");
69 }
70 }
71}71fn setup(mut commands: Commands, mut net: ResMut<NetResource>, mode: Res<DemoMode>) {
72 match mode.0 {
73 Mode::Server => {
74 net.start_server(5003);
75 println!("server listening on {ADDRESS}");
76
77 for index in 0..5 {
78 commands.spawn((
79 Replicated,
80 Position(Vec2::new(index as f32 * 80.0 - 160.0, 0.0)),
81 Velocity(Vec2::new(
82 70.0 + index as f32 * 15.0,
83 40.0 + index as f32 * 10.0,
84 )),
85 ));
86 }
87 }
88 Mode::Client => {
89 net.join_server(ADDRESS.to_string());
90 println!("client connected to {ADDRESS}");
91 }
92 }
93}Sourcepub fn start_server(&mut self, port: u16)
pub fn start_server(&mut self, port: u16)
Starts the server and installs the connection callback.
Examples found in repository?
103fn setup(mut net: ResMut<NetResource>, mode: Res<DemoMode>) {
104 match mode.0 {
105 Mode::Server => {
106 net.start_server(5002);
107 println!("server listening on {ADDRESS}");
108 }
109 Mode::Client => {
110 net.join_server(ADDRESS.to_string());
111 println!("client connected to {ADDRESS}");
112 }
113 }
114}More examples
55fn setup(mut commands: Commands, mut net: ResMut<NetResource>, mode: Res<DemoMode>) {
56 match mode.0 {
57 Mode::Server => {
58 net.start_server(5001);
59 println!("server listening on {ADDRESS}");
60 commands.spawn((
61 Replicated,
62 Position(Vec2::ZERO),
63 Health(100),
64 ));
65 }
66 Mode::Client => {
67 net.join_server(ADDRESS.to_string());
68 println!("client connected to {ADDRESS}");
69 }
70 }
71}71fn setup(mut commands: Commands, mut net: ResMut<NetResource>, mode: Res<DemoMode>) {
72 match mode.0 {
73 Mode::Server => {
74 net.start_server(5003);
75 println!("server listening on {ADDRESS}");
76
77 for index in 0..5 {
78 commands.spawn((
79 Replicated,
80 Position(Vec2::new(index as f32 * 80.0 - 160.0, 0.0)),
81 Velocity(Vec2::new(
82 70.0 + index as f32 * 15.0,
83 40.0 + index as f32 * 10.0,
84 )),
85 ));
86 }
87 }
88 Mode::Client => {
89 net.join_server(ADDRESS.to_string());
90 println!("client connected to {ADDRESS}");
91 }
92 }
93}Sourcepub fn queue_packet(&mut self, packet: ReplicationPacket)
pub fn queue_packet(&mut self, packet: ReplicationPacket)
Adds a replication packet to the outgoing queue.
Sourcepub fn send_packet_to(&self, socket: &Socket, packet: ReplicationPacket)
pub fn send_packet_to(&self, socket: &Socket, packet: ReplicationPacket)
Sends a replication packet immediately to one socket.
Sourcepub fn inject_packet(&mut self, packet: ReplicationPacket)
pub fn inject_packet(&mut self, packet: ReplicationPacket)
Injects a packet directly into the incoming queue.
Sourcepub fn queue_message<T: NetMessage>(&mut self, message: T)
pub fn queue_message<T: NetMessage>(&mut self, message: T)
Queues a typed network message for broadcast.
Examples found in repository?
120fn server_handle_messages(
121 mut commands: Commands,
122 mut net: ResMut<NetResource>,
123) {
124 for chat in net.drain_messages::<ChatSend>() {
125 println!("chat: {}", chat.text);
126 net.queue_message(ChatBroadcast {
127 text: format!("server heard: {}", chat.text),
128 });
129 }
130
131 for shot in net.drain_messages::<ShootProjectile>() {
132 println!("shoot request from client: {:?} -> {:?}", shot.origin, shot.direction);
133 commands.spawn((
134 Replicated,
135 Projectile,
136 Position(shot.origin),
137 Velocity(shot.direction.normalize_or_zero() * 150.0),
138 ));
139 }
140}
141
142fn server_move_projectiles(
143 time: Res<Time>,
144 mut query: Query<(&mut Position, &Velocity), With<Projectile>>,
145) {
146 for (mut position, velocity) in &mut query {
147 position.0 += velocity.0 * time.delta_secs();
148 }
149}
150
151fn client_send_messages(
152 time: Res<Time>,
153 mut tick: Local<f32>,
154 mut net: ResMut<NetResource>,
155) {
156 *tick += time.delta_secs();
157 if *tick < 1.0 {
158 return;
159 }
160 *tick = 0.0;
161
162 net.queue_message(ChatSend {
163 text: "hello from client".to_string(),
164 });
165 net.queue_message(ShootProjectile {
166 origin: Vec2::new(0.0, 0.0),
167 direction: Vec2::new(1.0, 0.2),
168 });
169}Sourcepub fn drain_outbox(&mut self) -> Vec<ReplicationPacket>
pub fn drain_outbox(&mut self) -> Vec<ReplicationPacket>
Drains all queued outgoing replication packets.
Sourcepub fn drain_inbox(&mut self) -> Vec<ReplicationPacket>
pub fn drain_inbox(&mut self) -> Vec<ReplicationPacket>
Drains all received replication packets.
Sourcepub fn drain_new_connections(&mut self) -> Vec<Socket>
pub fn drain_new_connections(&mut self) -> Vec<Socket>
Drains sockets that connected since the last snapshot broadcast.
Sourcepub fn drain_message_inbox(&mut self) -> Vec<RawNetMessage>
pub fn drain_message_inbox(&mut self) -> Vec<RawNetMessage>
Drains raw messages regardless of wire type.
Sourcepub fn drain_messages<T: NetMessage>(&mut self) -> Vec<T>
pub fn drain_messages<T: NetMessage>(&mut self) -> Vec<T>
Extracts only messages of type T, leaving the rest queued.
Examples found in repository?
120fn server_handle_messages(
121 mut commands: Commands,
122 mut net: ResMut<NetResource>,
123) {
124 for chat in net.drain_messages::<ChatSend>() {
125 println!("chat: {}", chat.text);
126 net.queue_message(ChatBroadcast {
127 text: format!("server heard: {}", chat.text),
128 });
129 }
130
131 for shot in net.drain_messages::<ShootProjectile>() {
132 println!("shoot request from client: {:?} -> {:?}", shot.origin, shot.direction);
133 commands.spawn((
134 Replicated,
135 Projectile,
136 Position(shot.origin),
137 Velocity(shot.direction.normalize_or_zero() * 150.0),
138 ));
139 }
140}
141
142fn server_move_projectiles(
143 time: Res<Time>,
144 mut query: Query<(&mut Position, &Velocity), With<Projectile>>,
145) {
146 for (mut position, velocity) in &mut query {
147 position.0 += velocity.0 * time.delta_secs();
148 }
149}
150
151fn client_send_messages(
152 time: Res<Time>,
153 mut tick: Local<f32>,
154 mut net: ResMut<NetResource>,
155) {
156 *tick += time.delta_secs();
157 if *tick < 1.0 {
158 return;
159 }
160 *tick = 0.0;
161
162 net.queue_message(ChatSend {
163 text: "hello from client".to_string(),
164 });
165 net.queue_message(ShootProjectile {
166 origin: Vec2::new(0.0, 0.0),
167 direction: Vec2::new(1.0, 0.2),
168 });
169}
170
171fn client_print_broadcasts(mut net: ResMut<NetResource>) {
172 for chat in net.drain_messages::<ChatBroadcast>() {
173 println!("broadcast: {}", chat.text);
174 }
175}Sourcepub fn flush_outbox(&mut self)
pub fn flush_outbox(&mut self)
Serializes and flushes all queued packets to connected clients.
Sourcepub fn poll_incoming(&mut self)
pub fn poll_incoming(&mut self)
Placeholder hook for future socket polling implementations.
Trait Implementations§
Source§impl Default for NetResource
impl Default for NetResource
Source§fn default() -> NetResource
fn default() -> NetResource
impl Resource for NetResource
Auto Trait Implementations§
impl Freeze for NetResource
impl RefUnwindSafe for NetResource
impl Send for NetResource
impl Sync for NetResource
impl Unpin for NetResource
impl UnsafeUnpin for NetResource
impl UnwindSafe for NetResource
Blanket Implementations§
Source§impl<T, U> AsBindGroupShaderType<U> for T
impl<T, U> AsBindGroupShaderType<U> for T
Source§fn as_bind_group_shader_type(&self, _images: &RenderAssets<GpuImage>) -> U
fn as_bind_group_shader_type(&self, _images: &RenderAssets<GpuImage>) -> U
T ShaderType for self. When used in AsBindGroup
derives, it is safe to assume that all images in self exist.Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
impl<T> ConditionalSend for Twhere
T: Send,
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>, which can then be
downcast into Box<dyn ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>, which can then be further
downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<T> DowncastSend for T
impl<T> DowncastSend for T
Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
impl<S, T> Duplex<S> for Twhere
T: FromSample<S> + ToSample<S>,
Source§impl<S> FromSample<S> for S
impl<S> FromSample<S> for S
fn from_sample_(s: S) -> S
Source§impl<T> FromWorld for Twhere
T: Default,
impl<T> FromWorld for Twhere
T: Default,
Source§fn from_world(_world: &mut World) -> T
fn from_world(_world: &mut World) -> T
Creates Self using default().
Source§impl<T, W> HasTypeWitness<W> for Twhere
W: MakeTypeWitness<Arg = T>,
T: ?Sized,
impl<T, W> HasTypeWitness<W> for Twhere
W: MakeTypeWitness<Arg = T>,
T: ?Sized,
Source§impl<T> Identity for Twhere
T: ?Sized,
impl<T> Identity for Twhere
T: ?Sized,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more