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::time::Duration;
|
||||
|
||||
use magpie_types::{CreatePanel, MagpieServerMsg, ServerMessenger};
|
||||
use magpie_types::{CreatePanel, MagpieServerMsg, SendMessage, ServerMessenger};
|
||||
use mio::net::{UnixListener, UnixStream};
|
||||
use mio::{Events, Interest, Poll, Token, Waker};
|
||||
use mio_signals::{Signal, Signals};
|
||||
|
@ -107,7 +107,12 @@ impl Client {
|
|||
let msg = WindowMessage::OpenWindow { id: window, script };
|
||||
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 },
|
||||
CloseWindow { id: usize },
|
||||
Quit,
|
||||
SendMessage { id: usize, msg: Vec<u8> },
|
||||
}
|
||||
|
||||
pub type WindowMessageSender = EventLoopProxy<WindowMessage>;
|
||||
|
@ -53,7 +54,7 @@ impl Window {
|
|||
pub fn request_redraw(&mut self) {
|
||||
self.graphics.display.gl_window().window().request_redraw();
|
||||
}
|
||||
|
||||
|
||||
pub fn update(&mut self) {
|
||||
let now = Instant::now();
|
||||
let dt = now.duration_since(self.last_update).as_secs_f32();
|
||||
|
@ -65,6 +66,10 @@ impl Window {
|
|||
self.graphics.draw(commands);
|
||||
});
|
||||
}
|
||||
|
||||
pub fn send_message(&mut self, msg: Vec<u8>) {
|
||||
self.script.on_message(self.panel, msg);
|
||||
}
|
||||
}
|
||||
|
||||
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>) -> ! {
|
||||
event_loop.run(move |event, event_loop, control_flow| match event {
|
||||
Event::WindowEvent { window_id, event } => {
|
||||
|
@ -123,6 +135,11 @@ impl WindowStore {
|
|||
}
|
||||
}
|
||||
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