re-folder

This commit is contained in:
Jovi Hsu 2021-11-19 16:55:34 +08:00
parent f5a341aad6
commit d7d503e49c
6 changed files with 44 additions and 11 deletions

View File

@ -15,7 +15,7 @@ use gloo::timers::callback::Interval;
use crate::{ use crate::{
components::{self, input::Input, ws::WebsocketMsg}, components::{self, input::Input, ws::WebsocketMsg},
protocal::{common::*, vnc::VncHandler}, protocal::{common::*, vnc::vnc::VncHandler},
utils::WeakComponentLink, utils::WeakComponentLink,
}; };
@ -327,17 +327,49 @@ impl PageRemote {
} }
fn bind_mouse_and_key(&mut self, canvas: &HtmlCanvasElement) { fn bind_mouse_and_key(&mut self, canvas: &HtmlCanvasElement) {
let window = web_sys::window().unwrap();
let handler = self.handler.clone();
let key_down = move |e: KeyboardEvent| {
e.stop_propagation();
ConsoleService::log(&format!("key down {}", e.key_code()));
handler.key_press(e.key_code(), true);
};
let handler = Box::new(key_down) as Box<dyn FnMut(_)>;
let cb = Closure::wrap(handler);
window
.add_event_listener_with_callback("keydown", cb.as_ref().unchecked_ref())
.unwrap();
cb.forget();
let handler = self.handler.clone();
let key_up = move |e: KeyboardEvent| {
e.stop_propagation();
handler.key_press(e.key_code(), false);
};
let handler = Box::new(key_up) as Box<dyn FnMut(_)>;
let cb = Closure::wrap(handler);
window
.add_event_listener_with_callback("keyup", cb.as_ref().unchecked_ref())
.unwrap();
cb.forget();
let handler = self.handler.clone(); let handler = self.handler.clone();
let key_press = move |e: KeyboardEvent| { let key_press = move |e: KeyboardEvent| {
e.stop_propagation(); e.stop_propagation();
handler.key_press(e.key_code()); ConsoleService::log(&format!("key press {}", e.key_code()));
}; };
let handler = Box::new(key_press) as Box<dyn FnMut(_)>; let handler = Box::new(key_press) as Box<dyn FnMut(_)>;
let cb = Closure::wrap(handler); let cb = Closure::wrap(handler);
canvas window
.add_event_listener_with_callback("keypress", cb.as_ref().unchecked_ref()) .add_event_listener_with_callback("keypress", cb.as_ref().unchecked_ref())
.unwrap(); .unwrap();
cb.forget(); cb.forget();

View File

@ -78,8 +78,8 @@ where
.require_frame(incremental); .require_frame(incremental);
} }
pub fn key_press(&self, key: u32) { pub fn key_press(&self, key: u32, down: bool) {
self.inner.as_ref().lock().unwrap().key_press(key); self.inner.as_ref().lock().unwrap().key_press(key, down);
} }
pub fn mouse_event(&self, x: u16, y: u16, button: u8) { pub fn mouse_event(&self, x: u16, y: u16, button: u8) {
@ -97,7 +97,7 @@ pub trait ProtocalImpl {
fn get_output(&mut self) -> Vec<ProtocalHandlerOutput>; fn get_output(&mut self) -> Vec<ProtocalHandlerOutput>;
fn set_credential(&mut self, username: &str, password: &str); fn set_credential(&mut self, username: &str, password: &str);
fn set_resolution(&mut self, width: u16, height: u16); fn set_resolution(&mut self, width: u16, height: u16);
fn key_press(&mut self, key: u32); fn key_press(&mut self, key: u32, down: bool);
fn mouse_event(&mut self, x: u16, y: u16, button: u8); fn mouse_event(&mut self, x: u16, y: u16, button: u8);
fn require_frame(&mut self, incremental: u8); fn require_frame(&mut self, incremental: u8);
} }

View File

@ -1,3 +1,2 @@
pub mod common; pub mod common;
mod des;
pub mod vnc; pub mod vnc;

View File

@ -0,0 +1,2 @@
mod des;
pub mod vnc;

View File

@ -1,4 +1,4 @@
use super::common::*; use super::super::common::*;
use super::des; use super::des;
use yew::services::ConsoleService; use yew::services::ConsoleService;
@ -167,13 +167,13 @@ impl ProtocalImpl for VncHandler {
// VNC client doen't support resolution change // VNC client doen't support resolution change
} }
fn key_press(&mut self, key: u32) { fn key_press(&mut self, key: u32, down: bool) {
if self.state != VncState::Connected { if self.state != VncState::Connected {
return; return;
} }
if let ServerMessage::None = self.msg_handling { if let ServerMessage::None = self.msg_handling {
let key = jskey_to_x11(key); let key = jskey_to_x11(key);
self.send_key_event(key, true); self.send_key_event(key, down);
} }
} }
@ -303,7 +303,7 @@ impl VncHandler {
sw.write_u8(if down { 1 } else { 0 }); // down sw.write_u8(if down { 1 } else { 0 }); // down
sw.write_u16(0); // padding sw.write_u16(0); // padding
sw.write_u32(key); // key sw.write_u32(key); // key
// ConsoleService::log(&format!("send key event {:x?} {:?}", key, down)); ConsoleService::log(&format!("send key event {:x?} {:?}", key, down));
self.outbuf.extend_from_slice(&out); self.outbuf.extend_from_slice(&out);
} }