use std::{cell::Cell, time::Instant}; use getset::Getters; use crate::event::{ connection::ConnectionEvent, disconnect::DisconnectEvent, received::PacketReceivedEvent, sent::PacketSentEvent, }; pub mod handler; pub mod listener; pub mod connection; pub mod disconnect; pub mod received; pub mod sent; pub enum EventKind where Uid: PartialEq, { Connection(ConnectionEvent), PacketReceived(PacketReceivedEvent), PacketSent(PacketSentEvent), Disconnect(DisconnectEvent), } #[derive(Getters)] pub struct Event where Uid: PartialEq, { #[get = "pub"] instant: Instant, #[get = "pub"] connection_id: Uid, canceled: Cell, #[get = "pub"] kind: EventKind, } impl Event where Uid: PartialEq, { pub fn new(connection_id: Uid, kind: EventKind) -> Self { Self { connection_id, instant: Instant::now(), canceled: Cell::new(true), kind, } } pub fn differed(connection_id: Uid, when: Instant, kind: EventKind) -> Self { Self { connection_id, instant: when, canceled: Cell::new(true), kind, } } pub fn canceled(&self) -> bool { self.canceled.get() } pub fn cancel(&self) { self.canceled.set(true); } }