Implement window-to-IPC messaging
This commit is contained in:
parent
7d751f27c9
commit
808d62421c
|
@ -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,
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in New Issue