Add separate Closed message

This commit is contained in:
Sofia 2026-07-16 02:58:08 +03:00
parent 4c24d1ce46
commit b9e40ceede
2 changed files with 8 additions and 4 deletions

View File

@ -66,12 +66,12 @@ impl ConnectionManager {
pub fn send_pings(&mut self) { pub fn send_pings(&mut self) {
let now = Instant::now(); let now = Instant::now();
if let Some(closing_since) = self.closing_since { if let Some(closing_since) = self.closing_since
&& !self.udp.is_closed()
{
if self.connections.len() == 0 { if self.connections.len() == 0 {
println!("UDP closed");
self.udp.close(); self.udp.close();
} else if now - closing_since > Duration::from_millis(1000) { } else if now - closing_since > Duration::from_millis(1000) {
println!("UDP closed");
self.udp.close(); self.udp.close();
} }
} }

View File

@ -31,6 +31,7 @@ pub enum PeerError {
pub enum PeerMessage { pub enum PeerMessage {
NewConnection(Connection), NewConnection(Connection),
Disconnected(Connection, Option<ConnectionError>), Disconnected(Connection, Option<ConnectionError>),
Closed,
} }
pub struct Peer { pub struct Peer {
@ -79,7 +80,10 @@ impl Peer {
#[must_use] #[must_use]
pub fn poll(&mut self) -> Result<Option<PeerMessage>, PeerError> { pub fn poll(&mut self) -> Result<Option<PeerMessage>, PeerError> {
if self.connection_mgr.udp.is_closed() { if self.connection_mgr.udp.is_closed() {
self.closed.store(true, Ordering::Relaxed); if self.closed.load(Ordering::Acquire) {
self.messages.push_back(PeerMessage::Closed);
}
self.closed.store(true, Ordering::Release);
} }
self.connection_mgr.send_pings(); self.connection_mgr.send_pings();