From 8bae725a803ee00bf5bc86b9fc0be6853b95115e Mon Sep 17 00:00:00 2001 From: zirkonya Date: Tue, 25 Aug 2026 18:41:28 +0200 Subject: Add getset ; prepare event and backend --- src/event.rs | 94 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 94 insertions(+) create mode 100644 src/event.rs (limited to 'src/event.rs') diff --git a/src/event.rs b/src/event.rs new file mode 100644 index 0000000..bbba586 --- /dev/null +++ b/src/event.rs @@ -0,0 +1,94 @@ +use std::{io, net::SocketAddr, time::Instant}; + +use getset::{Getters, Setters}; + +pub mod handler; +pub mod listener; + +pub enum EventKind +where + Uid: PartialEq, +{ + Connection(ConnectionEvent), + PacketReceived(PacketReceivedEvent), + PacketSent(PacketSentEvent), + Disconnect(DisconnectEvent), +} + +// TODO : identification +// TODO : reason type +#[derive(Getters)] +pub struct ConnectionEvent +where + Uid: PartialEq, +{ + #[getset(get = "pub")] + peer_addr: SocketAddr, + #[getset(get = "pub")] + local_addr: SocketAddr, + #[getset(get = "pub")] + connection_id: Uid, +} +#[derive(Getters)] +pub struct PacketReceivedEvent { + #[getset(get = "pub")] + packet: Packet, +} +#[derive(Getters)] +pub struct PacketSentEvent { + #[getset(get = "pub")] + packet: Packet, +} + +// TODO : better error type for protocol violation +pub type ProtocolViolation = String; + +pub enum DisconnectReason { + Normal, + Error(io::Error), + ProtocolError(ProtocolViolation), + Timeout, + ServerShutdown, +} + +#[derive(Getters)] +pub struct DisconnectEvent +where + Uid: PartialEq, +{ + #[getset(get = "pub")] + connection_id: Uid, + #[getset(get = "pub")] + reason: DisconnectReason, +} + +#[derive(Getters, Setters)] +pub struct Event +where + Uid: PartialEq, +{ + #[getset(get = "pub")] + instant: Instant, + #[getset(get = "pub", set = "pub")] + canceled: bool, + #[getset(get = "pub")] + kind: EventKind, +} + +impl Event { + pub fn new(kind: EventKind) -> Self { + Self { + instant: Instant::now(), + canceled: false, + kind, + } + } + + pub fn differed(when: Instant, kind: EventKind) -> Self { + Self { + instant: when, + canceled: false, + kind, + } + } +} -- cgit v1.2.3