some keyboard code

This commit is contained in:
Devaev Maxim
2018-07-09 05:32:16 +00:00
parent dbb6e7ebba
commit 6b148b377c
3 changed files with 35 additions and 18 deletions

View File

@@ -29,8 +29,12 @@ class Ps2Keyboard(multiprocessing.Process):
self.__event.set()
self.join()
def send_byte(self, code: int) -> None:
self.__queue.put(code)
def send_event(self, code: str, state: bool) -> None:
if state:
get_logger().info("Key pressed: %s", code)
else:
get_logger().info("Key released: %s", code)
# TODO: self.__queue.put(code)
def cleanup(self) -> None:
if self.is_alive():

View File

@@ -124,11 +124,25 @@ class Server: # pylint: disable=too-many-instance-attributes
aiohttp.web.run_app(app, host=host, port=port, print=self.__run_app_print)
async def __ws_handler(self, request: aiohttp.web.Request) -> aiohttp.web.WebSocketResponse:
logger = get_logger(0)
ws = aiohttp.web.WebSocketResponse(heartbeat=self.__heartbeat)
await ws.prepare(request)
await self.__register_socket(ws)
async for msg in ws:
if msg.type == aiohttp.web.WSMsgType.TEXT:
try:
event = json.loads(msg.data)
except Exception:
logger.exception("Can't parse JSON event from websocket")
else:
if event.get("event_type") == "key_event":
key_code = str(event.get("key_code", ""))[:64].strip()
key_state = event.get("key_state")
if key_code and key_state in [True, False]:
self.__keyboard.send_event(key_code, key_state)
continue
else:
logger.error("Invalid websocket event: %r", event)
await ws.send_str(json.dumps({"msg_type": "echo", "msg": msg.data}))
else:
break