mirror of
https://github.com/mofeng-git/One-KVM.git
synced 2025-12-12 17:20:30 +08:00
simplified hid
This commit is contained in:
parent
e2e8001ba8
commit
940fe28a9f
@ -1,15 +1,20 @@
|
||||
var hid = new function() {
|
||||
var __install_timer = null;
|
||||
|
||||
this.init = function() {
|
||||
keyboard.init();
|
||||
mouse.init();
|
||||
}
|
||||
|
||||
this.installCapture = function(ws) {
|
||||
var http = tools.makeRequest("GET", "/kvmd/hid", function() {
|
||||
if (http.readyState === 4) {
|
||||
if (http.status === 200) {
|
||||
features = JSON.parse(http.responseText).result.features;
|
||||
if (features.mouse) {
|
||||
mouse.installCapture(ws);
|
||||
mouse.setSocket(ws);
|
||||
}
|
||||
keyboard.installCapture(ws);
|
||||
keyboard.setSocket(ws);
|
||||
} else {
|
||||
tools.error("Can't resolve HID features:", http.responseText);
|
||||
__install_timer = setTimeout(() => hid.installCapture(ws), 1000);
|
||||
@ -23,7 +28,7 @@ var hid = new function() {
|
||||
clearTimeout(__install_timer);
|
||||
__install_timer = null;
|
||||
}
|
||||
mouse.clearCapture();
|
||||
keyboard.clearCapture();
|
||||
mouse.setSocket(null);
|
||||
keyboard.setSocket(null);
|
||||
};
|
||||
}
|
||||
|
||||
@ -1,23 +1,22 @@
|
||||
var keyboard = new function() {
|
||||
this.installCapture = function(ws) {
|
||||
// https://www.codeday.top/2017/05/03/24906.html
|
||||
tools.info("Installing keyboard capture ...")
|
||||
document.onkeydown = (event) => __keyHandler(ws, event, true);
|
||||
document.onkeyup = (event) => __keyHandler(ws, event, false);
|
||||
$("hid-keyboard-led").className = "led-on";
|
||||
var __ws = null;
|
||||
|
||||
this.init = function() {
|
||||
document.onkeydown = (event) => __keyHandler(event, true);
|
||||
document.onkeyup = (event) => __keyHandler(event, false);
|
||||
};
|
||||
|
||||
this.clearCapture = function() {
|
||||
tools.info("Removing keyboard capture ...")
|
||||
document.onkeydown = null;
|
||||
document.onkeyup = null;
|
||||
$("hid-keyboard-led").className = "led-off";
|
||||
this.setSocket = function(ws) {
|
||||
__ws = ws;
|
||||
$("hid-keyboard-led").className = (ws ? "led-on" : "led-off");
|
||||
};
|
||||
|
||||
var __keyHandler = function(ws, event, state) {
|
||||
var __keyHandler = function(event, state) {
|
||||
// https://github.com/wesbos/keycodes/blob/gh-pages/scripts.js
|
||||
el_key = $(event.code);
|
||||
if (el_key) {
|
||||
event.preventDefault();
|
||||
|
||||
tools.debug("Key", (state ? "pressed:" : "released:"), event);
|
||||
|
||||
if (state) {
|
||||
@ -28,12 +27,13 @@ var keyboard = new function() {
|
||||
el_key.removeAttribute("style");
|
||||
}
|
||||
|
||||
event.preventDefault();
|
||||
ws.send(JSON.stringify({
|
||||
event_type: "key",
|
||||
key: event.code,
|
||||
state: state,
|
||||
}));
|
||||
if (__ws) {
|
||||
__ws.send(JSON.stringify({
|
||||
event_type: "key",
|
||||
key: event.code,
|
||||
state: state,
|
||||
}));
|
||||
}
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
function main () {
|
||||
ui.init();
|
||||
hid.init();
|
||||
session.loadKvmdVersion();
|
||||
session.startPoller();
|
||||
stream.startPoller();
|
||||
|
||||
@ -1,38 +1,24 @@
|
||||
var mouse = new function() {
|
||||
var __send_move_timer = null;
|
||||
var __ws = null;
|
||||
var __current_pos = {x: 0, y:0};
|
||||
var __sent_pos = {x: 0, y:0};
|
||||
|
||||
this.installCapture = function(ws) {
|
||||
tools.info("Installing mouse capture ...");
|
||||
this.init = function() {
|
||||
el_stream_image = $("stream-image");
|
||||
el_stream_image.onmousedown = (event) => __buttonHandler(ws, event, true);
|
||||
el_stream_image.onmouseup = (event) => __buttonHandler(ws, event, false);
|
||||
el_stream_image.onmousedown = (event) => __buttonHandler(event, true);
|
||||
el_stream_image.onmouseup = (event) => __buttonHandler(event, false);
|
||||
el_stream_image.oncontextmenu = (event) => event.preventDefault();
|
||||
el_stream_image.onmousemove = __moveHandler;
|
||||
el_stream_image.onwheel = (event) => __wheelHandler(ws, event);
|
||||
__send_move_timer = setInterval(() => __sendMove(ws), 100);
|
||||
$("hid-mouse-led").className = "led-on";
|
||||
el_stream_image.onwheel = (event) => __wheelHandler(event);
|
||||
setInterval(__sendMove, 100);
|
||||
};
|
||||
|
||||
this.clearCapture = function() {
|
||||
tools.info("Removing mouse capture ...");
|
||||
if (__send_move_timer) {
|
||||
clearInterval(__send_move_timer);
|
||||
__send_move_timer = null;
|
||||
}
|
||||
__current_pos = {x: 0, y:0};
|
||||
__sent_pos = {x: 0, y:0};
|
||||
el_stream_image = $("stream-image");
|
||||
el_stream_image.onmousedown = null;
|
||||
el_stream_image.onmouseup = null;
|
||||
el_stream_image.oncontextmenu = null;
|
||||
el_stream_image.onmousemove = null;
|
||||
el_stream_image.onwheel = null;
|
||||
$("hid-mouse-led").className = "led-off";
|
||||
this.setSocket = function(ws) {
|
||||
$("hid-mouse-led").className = (ws ? "led-on" : "led-off");
|
||||
__ws = ws;
|
||||
};
|
||||
|
||||
var __buttonHandler = function(ws, event, state) {
|
||||
var __buttonHandler = function(event, state) {
|
||||
// https://www.w3schools.com/jsref/event_button.asp
|
||||
switch (event.button) {
|
||||
case 0: var button = "left"; break;
|
||||
@ -40,14 +26,16 @@ var mouse = new function() {
|
||||
default: var button = null; break;
|
||||
}
|
||||
if (button) {
|
||||
tools.debug("Mouse button", (state ? "pressed:" : "released:"), button);
|
||||
event.preventDefault();
|
||||
__sendMove(ws);
|
||||
ws.send(JSON.stringify({
|
||||
event_type: "mouse_button",
|
||||
button: button,
|
||||
state: state,
|
||||
}));
|
||||
tools.debug("Mouse button", (state ? "pressed:" : "released:"), button);
|
||||
__sendMove();
|
||||
if (__ws) {
|
||||
__ws.send(JSON.stringify({
|
||||
event_type: "mouse_button",
|
||||
button: button,
|
||||
state: state,
|
||||
}));
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
@ -59,28 +47,32 @@ var mouse = new function() {
|
||||
};
|
||||
};
|
||||
|
||||
var __sendMove = function(ws) {
|
||||
var __sendMove = function() {
|
||||
var pos = __current_pos;
|
||||
if (pos.x !== __sent_pos.x || pos.y !== __sent_pos.y) {
|
||||
tools.debug("Mouse move:", pos);
|
||||
ws.send(JSON.stringify({
|
||||
event_type: "mouse_move",
|
||||
to: pos,
|
||||
}));
|
||||
if (__ws) {
|
||||
__ws.send(JSON.stringify({
|
||||
event_type: "mouse_move",
|
||||
to: pos,
|
||||
}));
|
||||
}
|
||||
__sent_pos = pos;
|
||||
}
|
||||
};
|
||||
|
||||
var __wheelHandler = function(ws, event) {
|
||||
var __wheelHandler = function(event) {
|
||||
// https://learn.javascript.ru/mousewheel
|
||||
if (event.preventDefault) {
|
||||
event.preventDefault();
|
||||
}
|
||||
delta = {x: event.deltaX, y: event.deltaY};
|
||||
tools.debug("Mouse wheel:", delta);
|
||||
ws.send(JSON.stringify({
|
||||
event_type: "mouse_wheel",
|
||||
delta: delta,
|
||||
}));
|
||||
if (__ws) {
|
||||
__ws.send(JSON.stringify({
|
||||
event_type: "mouse_wheel",
|
||||
delta: delta,
|
||||
}));
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user