Add toggle to disable accepting new connections
This commit is contained in:
parent
4d843d2ccb
commit
a947f3a8cb
@ -49,6 +49,8 @@ pub(crate) struct ConnectionManager<
|
|||||||
connections: HashMap<SocketAddr, Connection<T>>,
|
connections: HashMap<SocketAddr, Connection<T>>,
|
||||||
closing_since: Option<Instant>,
|
closing_since: Option<Instant>,
|
||||||
config: PeerConfig,
|
config: PeerConfig,
|
||||||
|
|
||||||
|
accepting_connections: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<T: std::fmt::Debug + Clone + Serialize + DeserializeOwned + Send + Sync + 'static>
|
impl<T: std::fmt::Debug + Clone + Serialize + DeserializeOwned + Send + Sync + 'static>
|
||||||
@ -61,6 +63,7 @@ impl<T: std::fmt::Debug + Clone + Serialize + DeserializeOwned + Send + Sync + '
|
|||||||
connections: HashMap::new(),
|
connections: HashMap::new(),
|
||||||
closing_since: None,
|
closing_since: None,
|
||||||
config,
|
config,
|
||||||
|
accepting_connections: true,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -257,6 +260,10 @@ impl<T: std::fmt::Debug + Clone + Serialize + DeserializeOwned + Send + Sync + '
|
|||||||
if conn.state == ConnectionState::Connecting {
|
if conn.state == ConnectionState::Connecting {
|
||||||
conn.state = ConnectionState::ConnectingNearlyReady;
|
conn.state = ConnectionState::ConnectingNearlyReady;
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
if !self.accepting_connections {
|
||||||
|
self.connections
|
||||||
|
.insert(*addr, Connection::from(*addr, ConnectionState::Closing));
|
||||||
} else {
|
} else {
|
||||||
self.connections.insert(
|
self.connections.insert(
|
||||||
*addr,
|
*addr,
|
||||||
@ -264,6 +271,7 @@ impl<T: std::fmt::Debug + Clone + Serialize + DeserializeOwned + Send + Sync + '
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
Package::Ping => {
|
Package::Ping => {
|
||||||
if let Some(conn) = self.connections.get_mut(addr) {
|
if let Some(conn) = self.connections.get_mut(addr) {
|
||||||
if conn.state == ConnectionState::ConnectingNearlyReady
|
if conn.state == ConnectionState::ConnectingNearlyReady
|
||||||
@ -413,6 +421,10 @@ impl<T: std::fmt::Debug + Clone + Serialize + DeserializeOwned + Send + Sync + '
|
|||||||
pub fn connections(&self) -> Vec<Connection<T>> {
|
pub fn connections(&self) -> Vec<Connection<T>> {
|
||||||
self.connections.values().cloned().collect()
|
self.connections.values().cloned().collect()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn set_accepting_connections(&mut self, accepting: bool) {
|
||||||
|
self.accepting_connections = accepting;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Wrap UdpSocket with some helper methods
|
/// Wrap UdpSocket with some helper methods
|
||||||
|
|||||||
@ -238,6 +238,10 @@ impl<T: std::fmt::Debug + Clone + Serialize + DeserializeOwned + Send + Sync + '
|
|||||||
self.connection_mgr.connections()
|
self.connection_mgr.connections()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn set_accepting_connections(&mut self, accepting: bool) {
|
||||||
|
self.connection_mgr.set_accepting_connections(accepting);
|
||||||
|
}
|
||||||
|
|
||||||
pub fn statistics(&self) -> NetStats {
|
pub fn statistics(&self) -> NetStats {
|
||||||
let conns = self.connection_mgr.connections();
|
let conns = self.connection_mgr.connections();
|
||||||
let all_stats = conns.iter().map(|c| c.statistics());
|
let all_stats = conns.iter().map(|c| c.statistics());
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user