summaryrefslogtreecommitdiff
path: root/src/event
diff options
context:
space:
mode:
authorzirkonya <zirkonya@iridium.lan>2026-08-29 22:11:23 +0200
committerzirkonya <zirkonya@iridium.lan>2026-08-29 22:11:23 +0200
commitbf9b81e669f4ce98c8d58df5d776ae90726d7ec2 (patch)
treee0d5bdbd8a3423f1303577ddebbfa34696d336bb /src/event
parentbb41e396aca01fee9f81785681fac0a79d0fd9d8 (diff)
Add transport layer
Diffstat (limited to 'src/event')
-rw-r--r--src/event/connection.rs24
-rw-r--r--src/event/disconnect.rs4
-rw-r--r--src/event/handler.rs6
-rw-r--r--src/event/listener.rs5
-rw-r--r--src/event/received.rs2
-rw-r--r--src/event/sent.rs2
6 files changed, 25 insertions, 18 deletions
diff --git a/src/event/connection.rs b/src/event/connection.rs
index 99813fd..4af2164 100644
--- a/src/event/connection.rs
+++ b/src/event/connection.rs
@@ -1,13 +1,19 @@
-use std::net::SocketAddr;
-
use getset::Getters;
-// TODO : identification
-// TODO : reason type
#[derive(Getters)]
-pub struct ConnectionEvent {
- #[getset(get = "pub")]
- peer_addr: SocketAddr,
- #[getset(get = "pub")]
- local_addr: SocketAddr,
+pub struct ConnectionEvent<Uid>
+where
+ Uid: PartialEq,
+{
+ #[get = "pub"]
+ client_uid: Uid,
+}
+
+impl<Uid> ConnectionEvent<Uid>
+where
+ Uid: PartialEq,
+{
+ pub fn new(uid: Uid) -> Self {
+ Self { client_uid: uid }
+ }
}
diff --git a/src/event/disconnect.rs b/src/event/disconnect.rs
index 6511027..2183180 100644
--- a/src/event/disconnect.rs
+++ b/src/event/disconnect.rs
@@ -18,8 +18,8 @@ pub struct DisconnectEvent<Uid>
where
Uid: PartialEq,
{
- #[getset(get = "pub")]
+ #[get = "pub"]
connection_id: Uid,
- #[getset(get = "pub")]
+ #[get = "pub"]
reason: DisconnectReason,
}
diff --git a/src/event/handler.rs b/src/event/handler.rs
index 3f9827e..f801d12 100644
--- a/src/event/handler.rs
+++ b/src/event/handler.rs
@@ -1,7 +1,5 @@
-// TODO : dispatch event through all listener
-// TODO : maybe compile listener into one ?
-
use crate::{
+ codec::Codec,
context::Context,
event::{
Event,
@@ -12,6 +10,7 @@ use crate::{
pub struct EventHandler<Packet, Data = (), Uid = u64>
where
Uid: PartialEq,
+ Packet: Codec<Data>,
{
listeners: Vec<Box<dyn Listener<Packet, Data, Uid>>>,
}
@@ -19,6 +18,7 @@ where
impl<Packet, Data, Uid> EventHandler<Packet, Data, Uid>
where
Uid: PartialEq + Clone,
+ Packet: Codec<Data>,
{
pub fn register<L: Listener<Packet, Data, Uid> + 'static>(&mut self, listener: L) {
self.listeners.push(Box::new(listener));
diff --git a/src/event/listener.rs b/src/event/listener.rs
index 81f4b57..8ff6719 100644
--- a/src/event/listener.rs
+++ b/src/event/listener.rs
@@ -1,9 +1,9 @@
use crate::{
+ codec::Codec,
context::Context,
event::{ConnectionEvent, DisconnectEvent, PacketReceivedEvent, PacketSentEvent},
};
-// TODO : Listener ; interface to perform action when event occured
// TODO async trait for async runtime
pub enum ListenerResult {
@@ -21,8 +21,9 @@ pub enum ListenerResult {
pub trait Listener<Packet, Data = (), Uid = u64>
where
Uid: PartialEq,
+ Packet: Codec<Data>,
{
- fn on_connection(&self, event: &ConnectionEvent, ctx: &Context<Data>) -> ListenerResult {
+ fn on_connection(&self, event: &ConnectionEvent<Uid>, ctx: &Context<Data>) -> ListenerResult {
let _ = (event, ctx);
ListenerResult::Continue
}
diff --git a/src/event/received.rs b/src/event/received.rs
index 0ef6d0e..46e1f63 100644
--- a/src/event/received.rs
+++ b/src/event/received.rs
@@ -2,6 +2,6 @@ use getset::Getters;
#[derive(Getters)]
pub struct PacketReceivedEvent<Packet> {
- #[getset(get = "pub")]
+ #[get = "pub"]
packet: Packet,
}
diff --git a/src/event/sent.rs b/src/event/sent.rs
index 5278842..7e88a7f 100644
--- a/src/event/sent.rs
+++ b/src/event/sent.rs
@@ -2,6 +2,6 @@ use getset::Getters;
#[derive(Getters)]
pub struct PacketSentEvent<Packet> {
- #[getset(get = "pub")]
+ #[get = "pub"]
packet: Packet,
}