mirror of
https://github.com/mofeng-git/One-KVM.git
synced 2025-12-12 01:00:29 +08:00
send_key_events()
This commit is contained in:
parent
1d7d4100a5
commit
04c3763e69
@ -22,7 +22,6 @@
|
|||||||
|
|
||||||
import os
|
import os
|
||||||
import stat
|
import stat
|
||||||
import asyncio
|
|
||||||
import functools
|
import functools
|
||||||
|
|
||||||
from typing import Dict
|
from typing import Dict
|
||||||
@ -66,8 +65,6 @@ class HidApi:
|
|||||||
|
|
||||||
self.__ensure_symmap(self.__default_keymap_name)
|
self.__ensure_symmap(self.__default_keymap_name)
|
||||||
|
|
||||||
self.__key_lock = asyncio.Lock()
|
|
||||||
|
|
||||||
# =====
|
# =====
|
||||||
|
|
||||||
@exposed_http("GET", "/hid")
|
@exposed_http("GET", "/hid")
|
||||||
@ -102,9 +99,7 @@ class HidApi:
|
|||||||
if limit > 0:
|
if limit > 0:
|
||||||
text = text[:limit]
|
text = text[:limit]
|
||||||
symmap = self.__ensure_symmap(request.query.get("keymap", self.__default_keymap_name))
|
symmap = self.__ensure_symmap(request.query.get("keymap", self.__default_keymap_name))
|
||||||
async with self.__key_lock:
|
self.__hid.send_key_events(text_to_web_keys(text, symmap))
|
||||||
for (key, state) in text_to_web_keys(text, symmap):
|
|
||||||
self.__hid.send_key_event(key, state)
|
|
||||||
return make_json_response()
|
return make_json_response()
|
||||||
|
|
||||||
def __ensure_symmap(self, keymap_name: str) -> Dict[int, SymmapWebKey]:
|
def __ensure_symmap(self, keymap_name: str) -> Dict[int, SymmapWebKey]:
|
||||||
@ -127,13 +122,12 @@ class HidApi:
|
|||||||
|
|
||||||
@exposed_ws("key")
|
@exposed_ws("key")
|
||||||
async def __ws_key_handler(self, _: WebSocketResponse, event: Dict) -> None:
|
async def __ws_key_handler(self, _: WebSocketResponse, event: Dict) -> None:
|
||||||
async with self.__key_lock:
|
|
||||||
try:
|
try:
|
||||||
key = valid_hid_key(event["key"])
|
key = valid_hid_key(event["key"])
|
||||||
state = valid_bool(event["state"])
|
state = valid_bool(event["state"])
|
||||||
except Exception:
|
except Exception:
|
||||||
return
|
return
|
||||||
self.__hid.send_key_event(key, state)
|
self.__hid.send_key_events([(key, state)])
|
||||||
|
|
||||||
@exposed_ws("mouse_button")
|
@exposed_ws("mouse_button")
|
||||||
async def __ws_mouse_button_handler(self, _: WebSocketResponse, event: Dict) -> None:
|
async def __ws_mouse_button_handler(self, _: WebSocketResponse, event: Dict) -> None:
|
||||||
|
|||||||
@ -20,7 +20,9 @@
|
|||||||
# ========================================================================== #
|
# ========================================================================== #
|
||||||
|
|
||||||
|
|
||||||
|
from typing import Tuple
|
||||||
from typing import Dict
|
from typing import Dict
|
||||||
|
from typing import Iterable
|
||||||
from typing import AsyncGenerator
|
from typing import AsyncGenerator
|
||||||
from typing import Type
|
from typing import Type
|
||||||
|
|
||||||
@ -48,7 +50,7 @@ class BaseHid(BasePlugin):
|
|||||||
|
|
||||||
# =====
|
# =====
|
||||||
|
|
||||||
def send_key_event(self, key: str, state: bool) -> None:
|
def send_key_events(self, keys: Iterable[Tuple[str, bool]]) -> None:
|
||||||
raise NotImplementedError
|
raise NotImplementedError
|
||||||
|
|
||||||
def send_mouse_button_event(self, button: str, state: bool) -> None:
|
def send_mouse_button_event(self, button: str, state: bool) -> None:
|
||||||
|
|||||||
@ -20,7 +20,9 @@
|
|||||||
# ========================================================================== #
|
# ========================================================================== #
|
||||||
|
|
||||||
|
|
||||||
|
from typing import Tuple
|
||||||
from typing import Dict
|
from typing import Dict
|
||||||
|
from typing import Iterable
|
||||||
from typing import AsyncGenerator
|
from typing import AsyncGenerator
|
||||||
from typing import Any
|
from typing import Any
|
||||||
|
|
||||||
@ -113,8 +115,8 @@ class Plugin(BaseHid):
|
|||||||
|
|
||||||
# =====
|
# =====
|
||||||
|
|
||||||
def send_key_event(self, key: str, state: bool) -> None:
|
def send_key_events(self, keys: Iterable[Tuple[str, bool]]) -> None:
|
||||||
self.__keyboard_proc.send_key_event(key, state)
|
self.__keyboard_proc.send_key_events(keys)
|
||||||
|
|
||||||
def send_mouse_button_event(self, button: str, state: bool) -> None:
|
def send_mouse_button_event(self, button: str, state: bool) -> None:
|
||||||
self.__mouse_proc.send_button_event(button, state)
|
self.__mouse_proc.send_button_event(button, state)
|
||||||
|
|||||||
@ -22,8 +22,10 @@
|
|||||||
|
|
||||||
import dataclasses
|
import dataclasses
|
||||||
|
|
||||||
|
from typing import Tuple
|
||||||
from typing import List
|
from typing import List
|
||||||
from typing import Set
|
from typing import Set
|
||||||
|
from typing import Iterable
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
from typing import Any
|
from typing import Any
|
||||||
|
|
||||||
@ -89,7 +91,8 @@ class KeyboardProcess(BaseDeviceProcess):
|
|||||||
self._clear_queue()
|
self._clear_queue()
|
||||||
self._queue_event(_ResetEvent())
|
self._queue_event(_ResetEvent())
|
||||||
|
|
||||||
def send_key_event(self, key: str, state: bool) -> None:
|
def send_key_events(self, keys: Iterable[Tuple[str, bool]]) -> None:
|
||||||
|
for (key, state) in keys:
|
||||||
otg_key = KEYMAP[key].otg
|
otg_key = KEYMAP[key].otg
|
||||||
if otg_key.is_modifier:
|
if otg_key.is_modifier:
|
||||||
self._queue_event(_ModifierEvent(otg_key, state))
|
self._queue_event(_ModifierEvent(otg_key, state))
|
||||||
|
|||||||
@ -30,8 +30,10 @@ import struct
|
|||||||
import errno
|
import errno
|
||||||
import time
|
import time
|
||||||
|
|
||||||
|
from typing import Tuple
|
||||||
from typing import List
|
from typing import List
|
||||||
from typing import Dict
|
from typing import Dict
|
||||||
|
from typing import Iterable
|
||||||
from typing import AsyncGenerator
|
from typing import AsyncGenerator
|
||||||
|
|
||||||
import serial
|
import serial
|
||||||
@ -273,7 +275,8 @@ class Plugin(BaseHid, multiprocessing.Process): # pylint: disable=too-many-inst
|
|||||||
|
|
||||||
# =====
|
# =====
|
||||||
|
|
||||||
def send_key_event(self, key: str, state: bool) -> None:
|
def send_key_events(self, keys: Iterable[Tuple[str, bool]]) -> None:
|
||||||
|
for (key, state) in keys:
|
||||||
self.__queue_event(_KeyEvent(key, state))
|
self.__queue_event(_KeyEvent(key, state))
|
||||||
|
|
||||||
def send_mouse_button_event(self, button: str, state: bool) -> None:
|
def send_mouse_button_event(self, button: str, state: bool) -> None:
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user