Implement ServerMsg::SendMessage
This commit is contained in:
parent
bf2b8360c0
commit
ea1631d24d
|
@ -5,7 +5,7 @@ use std::sync::mpsc::{channel, Receiver, Sender};
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
use std::time::Duration;
|
use std::time::Duration;
|
||||||
|
|
||||||
use magpie_types::{CreatePanel, MagpieServerMsg, ServerMessenger};
|
use magpie_types::{CreatePanel, MagpieServerMsg, SendMessage, ServerMessenger};
|
||||||
use mio::net::{UnixListener, UnixStream};
|
use mio::net::{UnixListener, UnixStream};
|
||||||
use mio::{Events, Interest, Poll, Token, Waker};
|
use mio::{Events, Interest, Poll, Token, Waker};
|
||||||
use mio_signals::{Signal, Signals};
|
use mio_signals::{Signal, Signals};
|
||||||
|
@ -107,7 +107,12 @@ impl Client {
|
||||||
let msg = WindowMessage::OpenWindow { id: window, script };
|
let msg = WindowMessage::OpenWindow { id: window, script };
|
||||||
let _ = self.window_sender.send_event(msg);
|
let _ = self.window_sender.send_event(msg);
|
||||||
}
|
}
|
||||||
_ => unimplemented!(),
|
MagpieServerMsg::SendMessage(SendMessage { id, msg }) => {
|
||||||
|
if let Some(id) = self.id_to_window.get(&id).cloned() {
|
||||||
|
let msg = WindowMessage::SendMessage { id, msg };
|
||||||
|
let _ = self.window_sender.send_event(msg);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -16,6 +16,7 @@ pub enum WindowMessage {
|
||||||
OpenWindow { id: usize, script: PathBuf },
|
OpenWindow { id: usize, script: PathBuf },
|
||||||
CloseWindow { id: usize },
|
CloseWindow { id: usize },
|
||||||
Quit,
|
Quit,
|
||||||
|
SendMessage { id: usize, msg: Vec<u8> },
|
||||||
}
|
}
|
||||||
|
|
||||||
pub type WindowMessageSender = EventLoopProxy<WindowMessage>;
|
pub type WindowMessageSender = EventLoopProxy<WindowMessage>;
|
||||||
|
@ -65,6 +66,10 @@ impl Window {
|
||||||
self.graphics.draw(commands);
|
self.graphics.draw(commands);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn send_message(&mut self, msg: Vec<u8>) {
|
||||||
|
self.script.on_message(self.panel, msg);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct WindowStore {
|
pub struct WindowStore {
|
||||||
|
@ -84,6 +89,13 @@ impl WindowStore {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn get_ipc_window(&mut self, id: usize) -> Option<&mut Window> {
|
||||||
|
self.ipc_to_window
|
||||||
|
.get(&id)
|
||||||
|
.map(|id| self.windows.get_mut(id))
|
||||||
|
.flatten()
|
||||||
|
}
|
||||||
|
|
||||||
pub fn run(mut self, event_loop: EventLoop<WindowMessage>) -> ! {
|
pub fn run(mut self, event_loop: EventLoop<WindowMessage>) -> ! {
|
||||||
event_loop.run(move |event, event_loop, control_flow| match event {
|
event_loop.run(move |event, event_loop, control_flow| match event {
|
||||||
Event::WindowEvent { window_id, event } => {
|
Event::WindowEvent { window_id, event } => {
|
||||||
|
@ -123,6 +135,11 @@ impl WindowStore {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
WindowMessage::Quit => *control_flow = ControlFlow::Exit,
|
WindowMessage::Quit => *control_flow = ControlFlow::Exit,
|
||||||
|
WindowMessage::SendMessage { id, msg } => {
|
||||||
|
if let Some(window) = self.get_ipc_window(id) {
|
||||||
|
window.send_message(msg);
|
||||||
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
_ => {}
|
_ => {}
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in New Issue