From 6535683bbfaf3774b8d33d92caf9e4650ba6b814 Mon Sep 17 00:00:00 2001 From: vyfor Date: Fri, 29 Nov 2024 19:42:47 +0500 Subject: [PATCH] refactor(events): use the client `DisconnectEvent` instead of the local `ClientDisconnectedEvent` --- src/ipc/pipe/mod.rs | 5 +++-- src/ipc/pipe/platform/unix/client.rs | 6 +++--- src/ipc/pipe/platform/unix/server.rs | 2 +- src/ipc/pipe/platform/windows/client.rs | 8 ++++---- src/ipc/pipe/platform/windows/server.rs | 2 +- src/messages/events/local/client_disconnected.rs | 15 --------------- src/messages/events/local/mod.rs | 4 ---- 7 files changed, 12 insertions(+), 30 deletions(-) delete mode 100644 src/messages/events/local/client_disconnected.rs diff --git a/src/ipc/pipe/mod.rs b/src/ipc/pipe/mod.rs index 155667b6..e00946ec 100644 --- a/src/ipc/pipe/mod.rs +++ b/src/ipc/pipe/mod.rs @@ -3,6 +3,7 @@ pub mod platform; use std::sync::Arc; use std::{io, sync::mpsc::Sender}; +use crate::client_event; use crate::{ local_event, messages::{events::local::ErrorEvent, message::Message}, @@ -30,9 +31,9 @@ pub trait PipeClientImpl { type PipeType; } -fn report_error(tx: &Sender, error: io::Error) { +fn report_error(id: u32, tx: &Sender, error: io::Error) { if error.kind() == io::ErrorKind::BrokenPipe { - tx.send(local_event!(0, ClientDisconnected)).ok(); + tx.send(client_event!(id, Disconnect)).ok(); return; } diff --git a/src/ipc/pipe/platform/unix/client.rs b/src/ipc/pipe/platform/unix/client.rs index 9fba3dda..2227ad47 100644 --- a/src/ipc/pipe/platform/unix/client.rs +++ b/src/ipc/pipe/platform/unix/client.rs @@ -3,8 +3,8 @@ use std::os::unix::net::UnixStream; use std::sync::mpsc::Sender; use std::thread::JoinHandle; +use crate::client_event; use crate::ipc::pipe::{report_error, PipeClientImpl}; -use crate::local_event; use crate::messages::events::client::ClientEvent; use crate::messages::events::event::Event; use crate::messages::message::Message; @@ -48,7 +48,7 @@ impl PipeClientImpl for PipeClient { loop { match read_pipe.read(&mut buf) { Ok(0) => { - tx.send(local_event!(id, ClientDisconnected)).ok(); + tx.send(client_event!(id, Disconnect)).ok(); break; } Ok(n) => match ClientEvent::deserialize(&buf[..n]) { @@ -60,7 +60,7 @@ impl PipeClientImpl for PipeClient { } }, Err(e) => { - report_error(&tx, e); + report_error(id, &tx, e); break; } } diff --git a/src/ipc/pipe/platform/unix/server.rs b/src/ipc/pipe/platform/unix/server.rs index 9017ba9e..21db04a2 100644 --- a/src/ipc/pipe/platform/unix/server.rs +++ b/src/ipc/pipe/platform/unix/server.rs @@ -30,7 +30,7 @@ impl PipeServerImpl for PipeServer { session_manager, pipe_name: pipe_name.to_string(), tx, - next_client_id: Arc::new(AtomicU32::new(1)), + next_client_id: Arc::new(AtomicU32::new(0)), running: Arc::new(AtomicBool::new(false)), listener: None, thread_handle: None, diff --git a/src/ipc/pipe/platform/windows/client.rs b/src/ipc/pipe/platform/windows/client.rs index ecaf4fb1..c5d7ce85 100644 --- a/src/ipc/pipe/platform/windows/client.rs +++ b/src/ipc/pipe/platform/windows/client.rs @@ -6,8 +6,8 @@ use std::sync::Arc; use std::thread::JoinHandle; use super::{GetOverlappedResult, Overlapped, ReadFile, WriteFile, ERROR_IO_PENDING}; +use crate::client_event; use crate::ipc::pipe::{report_error, PipeClientImpl}; -use crate::local_event; use crate::messages::events::client::ClientEvent; use crate::messages::events::event::Event; use crate::messages::message::Message; @@ -90,7 +90,7 @@ impl PipeClientImpl for PipeClient { if read_result == 0 { let error = io::Error::last_os_error(); if error.raw_os_error() != Some(ERROR_IO_PENDING as i32) { - report_error(&tx, io::Error::last_os_error()); + report_error(id, &tx, error); break; } } @@ -102,12 +102,12 @@ impl PipeClientImpl for PipeClient { 1, ) == 0 { - report_error(&tx, io::Error::last_os_error()); + report_error(id, &tx, io::Error::last_os_error()); break; } if bytes_read == 0 { - tx.send(local_event!(id, ClientDisconnected)).ok(); + tx.send(client_event!(id, Disconnect)).ok(); break; } diff --git a/src/ipc/pipe/platform/windows/server.rs b/src/ipc/pipe/platform/windows/server.rs index 9a168c79..2801c28f 100644 --- a/src/ipc/pipe/platform/windows/server.rs +++ b/src/ipc/pipe/platform/windows/server.rs @@ -38,7 +38,7 @@ impl PipeServerImpl for PipeServer { session_manager, pipe_name: pipe_name.to_string(), tx, - next_client_id: Arc::new(AtomicU32::new(1)), + next_client_id: Arc::new(AtomicU32::new(0)), running: Arc::new(AtomicBool::new(false)), thread_handle: None, } diff --git a/src/messages/events/local/client_disconnected.rs b/src/messages/events/local/client_disconnected.rs deleted file mode 100644 index b94bebbd..00000000 --- a/src/messages/events/local/client_disconnected.rs +++ /dev/null @@ -1,15 +0,0 @@ -use crate::{ - ipc::pipe::PipeServerImpl, - messages::events::event::{EventContext, OnEvent}, -}; - -#[derive(Debug, Default)] -pub struct ClientDisconnectedEvent; - -impl OnEvent for ClientDisconnectedEvent { - fn on_event(self, ctx: &mut EventContext) -> crate::Result<()> { - ctx.cord.pipe.disconnect(ctx.client_id)?; - - Ok(()) - } -} diff --git a/src/messages/events/local/mod.rs b/src/messages/events/local/mod.rs index b66aebea..ebc43942 100644 --- a/src/messages/events/local/mod.rs +++ b/src/messages/events/local/mod.rs @@ -1,21 +1,17 @@ -pub mod client_disconnected; pub mod error; -pub use client_disconnected::ClientDisconnectedEvent; pub use error::ErrorEvent; use super::event::{EventContext, OnEvent}; #[derive(Debug)] pub enum LocalEvent { - ClientDisconnected(ClientDisconnectedEvent), Error(ErrorEvent), } impl OnEvent for LocalEvent { fn on_event(self, ctx: &mut EventContext) -> crate::Result<()> { match self { - Self::ClientDisconnected(e) => e.on_event(ctx), Self::Error(e) => e.on_event(ctx), } }