From 808d62421cd35ae4cbab3583c02d5b7c8df1371a Mon Sep 17 00:00:00 2001 From: mars Date: Wed, 16 Nov 2022 22:17:17 -0700 Subject: [PATCH] Implement window-to-IPC messaging --- apps/magpie/src/service/ipc.rs | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/apps/magpie/src/service/ipc.rs b/apps/magpie/src/service/ipc.rs index 869e297..2fbbda2 100644 --- a/apps/magpie/src/service/ipc.rs +++ b/apps/magpie/src/service/ipc.rs @@ -14,18 +14,29 @@ use mio_signals::{Signal, Signals}; use parking_lot::RwLock; use slab::Slab; -use crate::protocol::{CreatePanel, MagpieServerMsg, SendMessage, ServerMessenger}; +use crate::protocol::*; use crate::service::window::{WindowMessage, WindowMessageSender}; const SOCK_NAME: &str = "magpie.sock"; -pub enum IpcMessage {} +#[derive(Debug)] +pub enum IpcMessage { + PanelMessage { window: usize, message: Vec }, +} +#[derive(Clone)] pub struct IpcMessageSender { - waker: Waker, + waker: Arc, sender: Sender, } +impl IpcMessageSender { + pub fn send(&self, msg: IpcMessage) { + let _ = self.sender.send(msg); + let _ = self.waker.wake(); + } +} + /// Wraps [mio::net::UnixListener] with automatic file deletion on drop. pub struct Listener { pub uds: UnixListener, @@ -57,6 +68,7 @@ impl DerefMut for Listener { pub struct IpcData { poll: Poll, + window_to_client_panel: HashMap, next_window_id: usize, } @@ -173,12 +185,13 @@ impl Ipc { let (sender, message_recv) = channel(); let sender = IpcMessageSender { - waker: Waker::new(registry, message_recv_token)?, + waker: Arc::new(Waker::new(registry, message_recv_token)?), sender, }; let data = IpcData { poll, + window_to_client_panel: HashMap::new(), next_window_id: 0, };