1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
use crate::{Packet, Peer, PeerID, Socket};
/// An ENet event returned by [`Host::service`](`crate::Host::service`).
#[derive(Debug)]
pub enum Event<'a, S: Socket> {
/// A new peer has connected.
Connect {
/// Peer that generated the event.
peer: &'a mut Peer<S>,
/// Data associated with the event, sent by the peer on connect.
data: u32,
},
/// A peer has disconnected.
Disconnect {
/// Peer that generated the event.
peer: &'a mut Peer<S>,
/// Data associated with the event, sent by the peer on disconnect.
data: u32,
},
/// A peer sent a packet to us.
Receive {
/// Peer that generated the event.
peer: &'a mut Peer<S>,
/// Channel the peer sent the packet on.
channel_id: u8,
/// The actual packet data.
packet: Packet,
},
}
impl<S: Socket> Event<'_, S> {
/// Remove the peer reference from this event, converting into an [`EventNoRef`].
#[must_use]
pub fn no_ref(self) -> EventNoRef {
match self {
Self::Connect { peer, data } => EventNoRef::Connect {
peer: peer.id(),
data,
},
Self::Disconnect { peer, data } => EventNoRef::Disconnect {
peer: peer.id(),
data,
},
Self::Receive {
peer,
channel_id,
packet,
} => EventNoRef::Receive {
peer: peer.id(),
channel_id,
packet,
},
}
}
}
/// An ENet event, like [`Event`], but without peer references.
///
/// Acquired with [`Event::no_ref`].
#[derive(Debug, Clone)]
pub enum EventNoRef {
/// A new peer has connected.
Connect {
/// Peer that generated the event.
peer: PeerID,
/// Data associated with the event, sent by the peer on connect.
data: u32,
},
/// A peer has disconnected.
Disconnect {
/// Peer that generated the event.
peer: PeerID,
/// Data associated with the event, sent by the peer on disconnect.
data: u32,
},
/// A peer sent a packet to us.
Receive {
/// Peer that generated the event.
peer: PeerID,
/// Channel the peer sent the packet on.
channel_id: u8,
/// The actual packet data.
packet: Packet,
},
}