Implement window-to-IPC messaging

This commit is contained in:
mars 2022-11-16 22:17:17 -07:00
parent 7d751f27c9
commit 808d62421c
1 changed files with 17 additions and 4 deletions

View File

@ -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<u8> },
}
#[derive(Clone)]
pub struct IpcMessageSender {
waker: Waker,
waker: Arc<Waker>,
sender: Sender<IpcMessage>,
}
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<usize, (usize, PanelId)>,
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,
};