p2p/service_impl/mio/
token.rs1use std::{collections::BTreeMap, net::SocketAddr};
2
3use crate::ConnectionAddr;
4
5#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
6pub enum Token {
7 Waker,
8 Listener(SocketAddr),
9 Connection(ConnectionAddr),
10}
11
12#[derive(Default)]
13pub struct TokenRegistry {
14 map: BTreeMap<Token, mio::Token>,
15 reverse: BTreeMap<mio::Token, Token>,
16 last: usize,
17}
18
19impl TokenRegistry {
20 pub fn register(&mut self, token: Token) -> mio::Token {
21 *self.map.entry(token).or_insert_with(|| {
22 let mio_token = mio::Token(self.last);
23 self.last += 1;
24 self.reverse.insert(mio_token, token);
25 mio_token
26 })
27 }
28
29 pub fn get(&mut self, token: &mio::Token) -> Option<Token> {
30 self.reverse.get(token).copied()
31 }
32}