Skip to content

Commit 1d0d35c

Browse files
author
Matthew Fisher
committed
remove urgency
Now that NetworkTime was removed, there's no need to differentiate between messages that need to be sent immediately or on the next game tick; all messages are now sent on the next game tick. Signed-off-by: Matthew Fisher <[email protected]>
1 parent db0c1ac commit 1d0d35c

File tree

6 files changed

+34
-115
lines changed

6 files changed

+34
-115
lines changed

examples/client.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,18 +28,18 @@ fn connection_handler(mut events: EventReader<NetworkEvent>) {
2828
match event {
2929
NetworkEvent::Message(_, msg) => {
3030
info!("server sent a message: {:?}", msg);
31-
},
31+
}
3232
NetworkEvent::SendError(err, msg) => {
3333
error!(
3434
"NetworkEvent::SendError (payload [{:?}]): {:?}",
3535
msg.payload, err
3636
);
37-
},
37+
}
3838
NetworkEvent::RecvError(err) => {
3939
error!("NetworkEvent::RecvError: {:?}", err);
40-
},
40+
}
4141
// discard irrelevant events
42-
_ => {},
42+
_ => {}
4343
}
4444
}
4545
}

src/lib.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ mod events;
22
mod message;
33
mod systems;
44
mod transport;
5-
mod urgency;
65

76
use std::collections::HashMap;
87
use std::net::SocketAddr;

src/message.rs

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,24 +2,19 @@ use std::net::SocketAddr;
22

33
use bytes::Bytes;
44

5-
use super::urgency::Urgency;
6-
75
pub struct Message {
86
/// The destination to send the message.
97
pub destination: SocketAddr,
108
/// The serialized payload itself.
119
pub payload: Bytes,
12-
/// The requirement around when this message should be sent.
13-
pub urgency: Urgency,
1410
}
1511

1612
impl Message {
1713
/// Creates and returns a new Message.
18-
pub(crate) fn new(destination: SocketAddr, payload: &[u8], urgency: Urgency) -> Self {
14+
pub(crate) fn new(destination: SocketAddr, payload: &[u8]) -> Self {
1915
Self {
2016
destination,
2117
payload: Bytes::copy_from_slice(payload),
22-
urgency,
2318
}
2419
}
2520
}

src/systems.rs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1-
use std::{io, net::{SocketAddr, UdpSocket}};
1+
use std::{
2+
io,
3+
net::{SocketAddr, UdpSocket},
4+
};
25

36
use bevy::prelude::*;
47
use bytes::Bytes;
@@ -7,10 +10,7 @@ use crate::HeartbeatTimer;
710

811
use super::{events::NetworkEvent, transport::Transport, NetworkResource};
912

10-
pub fn client_recv_packet_system(
11-
socket: Res<UdpSocket>,
12-
mut events: EventWriter<NetworkEvent>,
13-
) {
13+
pub fn client_recv_packet_system(socket: Res<UdpSocket>, mut events: EventWriter<NetworkEvent>) {
1414
loop {
1515
let mut buf = [0; 32];
1616
match socket.recv_from(&mut buf) {
@@ -47,9 +47,9 @@ pub fn server_recv_packet_system(
4747
Ok((recv_len, address)) => {
4848
let payload = Bytes::copy_from_slice(&buf[..recv_len]);
4949
if net
50-
.connections
51-
.insert(address, time.time_since_startup())
52-
.is_none()
50+
.connections
51+
.insert(address, time.time_since_startup())
52+
.is_none()
5353
{
5454
// connection established
5555
events.send(NetworkEvent::Connected(address));

src/transport.rs

Lines changed: 21 additions & 86 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use std::{collections::VecDeque, net::SocketAddr};
22

3-
use super::{message::Message, urgency::Urgency};
3+
use super::message::Message;
44

55
/// Resource serving as the owner of the queue of messages to be sent. This resource also serves
66
/// as the interface for other systems to send messages.
@@ -67,25 +67,9 @@ impl Transport {
6767
}
6868

6969
/// Creates a `Message` with the default guarantees provided by the `Socket` implementation and
70-
/// pushes it onto the messages queue to be sent on next sim tick.
70+
/// pushes it onto the messages queue to be sent on the next frame.
7171
pub fn send(&mut self, destination: SocketAddr, payload: &[u8]) {
72-
self.send_with_requirements(destination, payload, Urgency::OnTick);
73-
}
74-
75-
/// Creates a `Message` with the default guarantees provided by the `Socket` implementation and
76-
/// Pushes it onto the messages queue to be sent immediately.
77-
pub fn send_immediate(&mut self, destination: SocketAddr, payload: &[u8]) {
78-
self.send_with_requirements(destination, payload, Urgency::Immediate);
79-
}
80-
81-
/// Creates and enqueues a `Message` with the specified guarantee.
82-
pub fn send_with_requirements(
83-
&mut self,
84-
destination: SocketAddr,
85-
payload: &[u8],
86-
timing: Urgency,
87-
) {
88-
let message = Message::new(destination, payload, timing);
72+
let message = Message::new(destination, payload);
8973
self.messages.push_back(message);
9074
}
9175

@@ -101,19 +85,13 @@ impl Transport {
10185
&self.messages
10286
}
10387

104-
/// Returns the messages to send by returning the immediate messages or anything adhering to
105-
/// the given filter.
88+
/// Drains the messages queue and returns the drained messages. The filter allows you to drain
89+
/// only messages that adhere to your filter. This might be useful in a scenario like draining
90+
/// messages with a particular urgency requirement.
10691
pub fn drain_messages_to_send(
10792
&mut self,
10893
mut filter: impl FnMut(&mut Message) -> bool,
10994
) -> Vec<Message> {
110-
self.drain_messages(|message| message.urgency == Urgency::Immediate || filter(message))
111-
}
112-
113-
/// Drains the messages queue and returns the drained messages. The filter allows you to drain
114-
/// only messages that adhere to your filter. This might be useful in a scenario like draining
115-
/// messages with a particular urgency requirement.
116-
pub fn drain_messages(&mut self, mut filter: impl FnMut(&mut Message) -> bool) -> Vec<Message> {
11795
let mut drained = Vec::with_capacity(self.messages.len());
11896
let mut i = 0;
11997
while i != self.messages.len() {
@@ -145,100 +123,57 @@ mod tests {
145123
use super::*;
146124

147125
#[test]
148-
fn test_send_with_default_requirements() {
126+
fn test_send() {
149127
let mut transport = create_test_transport();
150128

151129
transport.send("127.0.0.1:3000".parse().unwrap(), test_payload());
152130

153131
let packet = &transport.messages[0];
154132

155133
assert_eq!(transport.messages.len(), 1);
156-
assert_eq!(packet.urgency, Urgency::OnTick);
157-
}
158-
159-
#[test]
160-
fn test_send_immediate_message() {
161-
let mut transport = create_test_transport();
162-
163-
transport.send_immediate("127.0.0.1:3000".parse().unwrap(), test_payload());
164-
165-
let packet = &transport.messages[0];
166-
167-
assert_eq!(transport.messages.len(), 1);
168-
assert_eq!(packet.urgency, Urgency::Immediate);
134+
assert_eq!(packet.payload, test_payload());
169135
}
170136

171137
#[test]
172138
fn test_has_messages() {
173139
let mut transport = create_test_transport();
174140
assert_eq!(transport.has_messages(), false);
175-
transport.send_immediate("127.0.0.1:3000".parse().unwrap(), test_payload());
141+
transport.send("127.0.0.1:3000".parse().unwrap(), test_payload());
176142
assert_eq!(transport.has_messages(), true);
177143
}
178144

179145
#[test]
180-
fn test_drain_only_immediate_messages() {
146+
fn test_drain_only_heartbeat_messages() {
181147
let mut transport = create_test_transport();
182148

183149
let addr = "127.0.0.1:3000".parse().unwrap();
184-
transport.send_immediate(addr, test_payload());
185-
transport.send_immediate(addr, test_payload());
186150
transport.send(addr, test_payload());
151+
transport.send(addr, heartbeat_payload());
152+
transport.send(addr, test_payload());
153+
transport.send(addr, heartbeat_payload());
187154
transport.send(addr, test_payload());
188-
transport.send_immediate(addr, test_payload());
189-
190-
assert_eq!(transport.drain_messages_to_send(|_| false).len(), 3);
191-
assert_eq!(transport.drain_messages_to_send(|_| false).len(), 0);
192-
}
193-
194-
#[test]
195-
fn test_drain_only_messages_with_specific_requirements() {
196-
let mut transport = create_test_transport();
197-
198-
let addr = "127.0.0.1:3000".parse().unwrap();
199-
transport.send_with_requirements(addr, test_payload(), Urgency::OnTick);
200-
transport.send_with_requirements(addr, test_payload(), Urgency::Immediate);
201-
transport.send_with_requirements(addr, test_payload(), Urgency::OnTick);
202-
transport.send_with_requirements(addr, test_payload(), Urgency::Immediate);
203-
transport.send_with_requirements(addr, test_payload(), Urgency::OnTick);
204155

205156
assert_eq!(
206157
transport
207-
.drain_messages(|message| message.urgency == Urgency::Immediate)
158+
.drain_messages_to_send(|m| m.payload == heartbeat_payload())
208159
.len(),
209160
2
210161
);
211162
// validate removal
212163
assert_eq!(
213164
transport
214-
.drain_messages(|message| message.urgency == Urgency::Immediate)
165+
.drain_messages_to_send(|m| m.payload == heartbeat_payload())
215166
.len(),
216167
0
217168
);
218-
assert_eq!(
219-
transport
220-
.drain_messages(|message| message.urgency == Urgency::OnTick)
221-
.len(),
222-
3
223-
);
169+
assert_eq!(transport.drain_messages_to_send(|_| false).len(), 0);
170+
assert_eq!(transport.drain_messages_to_send(|_| true).len(), 3);
171+
// validate removal
172+
assert_eq!(transport.drain_messages_to_send(|_| true).len(), 0);
224173
}
225174

226-
#[test]
227-
fn test_send_with_requirements() {
228-
let mut transport = create_test_transport();
229-
let addr = "127.0.0.1:3000".parse().unwrap();
230-
231-
let urgency = [Urgency::OnTick, Urgency::OnTick];
232-
233-
for urg in urgency.iter().copied() {
234-
transport.send_with_requirements(addr, test_payload(), urg);
235-
}
236-
237-
assert_eq!(transport.messages.len(), urgency.len());
238-
239-
for (i, urg) in urgency.iter().enumerate() {
240-
assert_eq!(transport.messages[i].urgency, *urg);
241-
}
175+
fn heartbeat_payload() -> &'static [u8] {
176+
b""
242177
}
243178

244179
fn test_payload() -> &'static [u8] {

src/urgency.rs

Lines changed: 0 additions & 10 deletions
This file was deleted.

0 commit comments

Comments
 (0)