Skip to main content

raknet_rust/session/
state.rs

1#[derive(Debug, Clone, Copy, PartialEq, Eq)]
2pub enum SessionState {
3    Offline,
4    Req1Recv,
5    Reply1Sent,
6    Req2Recv,
7    Reply2Sent,
8    ConnReqRecv,
9    ConnReqAcceptedSent,
10    NewIncomingRecv,
11    Connected,
12    Closing,
13    Closed,
14}
15
16impl SessionState {
17    pub fn can_transition_to(self, next: SessionState) -> bool {
18        use SessionState as S;
19
20        if self == next {
21            return true;
22        }
23
24        matches!(
25            (self, next),
26            (S::Offline, S::Req1Recv)
27                | (S::Req1Recv, S::Reply1Sent)
28                | (S::Reply1Sent, S::Req2Recv)
29                | (S::Req2Recv, S::Reply2Sent)
30                | (S::Reply2Sent, S::ConnReqRecv)
31                | (S::ConnReqRecv, S::ConnReqAcceptedSent)
32                | (S::ConnReqAcceptedSent, S::NewIncomingRecv)
33                | (S::NewIncomingRecv, S::Connected)
34                | (S::Connected, S::Closing)
35                | (S::Closing, S::Closed)
36        )
37    }
38}