You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
89 lines
2.2 KiB
Python
89 lines
2.2 KiB
Python
from evdev import UInput, ecodes as e
|
|
import time
|
|
|
|
# Create virtual keyboard
|
|
ui = UInput({
|
|
e.EV_KEY: [getattr(e, f"KEY_{chr(c).upper()}") for c in range(ord('a'), ord('z')+1)] + [e.KEY_SPACE, e.KEY_UP, e.KEY_DOWN, e.KEY_LEFT, e.KEY_RIGHT, e.KEY_LEFTSHIFT, e.KEY_TAB, e.KEY_ENTER]
|
|
}, name="virtual-keyboard")
|
|
|
|
def press(key):
|
|
ui.write(e.EV_KEY, key, 1) # key down
|
|
ui.write(e.EV_KEY, key, 0) # key up
|
|
ui.syn()
|
|
|
|
|
|
def home():
|
|
print("Sending shift+tab")
|
|
ui.write(e.EV_KEY, e.KEY_LEFTSHIFT, 1) # Press Ctrl
|
|
ui.write(e.EV_KEY, e.KEY_TAB, 1) # Press 1
|
|
ui.syn()
|
|
time.sleep(0.1)
|
|
ui.write(e.EV_KEY, e.KEY_LEFTSHIFT, 0) # Release 1
|
|
ui.write(e.EV_KEY, e.KEY_TAB, 0) # Release Ctrl
|
|
ui.syn()
|
|
|
|
|
|
def type_string(text):
|
|
for ch in text:
|
|
if ch == ' ':
|
|
press(e.KEY_SPACE)
|
|
elif 'a' <= ch <= 'z':
|
|
key = getattr(e, f"KEY_{ch.upper()}")
|
|
press(key)
|
|
else:
|
|
# ignore unsupported characters
|
|
continue
|
|
|
|
time.sleep(0.01)
|
|
|
|
|
|
def run_a_game(name):
|
|
home()
|
|
press(e.KEY_LEFT)
|
|
press(e.KEY_LEFT)
|
|
press(e.KEY_DOWN)
|
|
press(e.KEY_ENTER)
|
|
time.sleep(0.3)
|
|
press(e.KEY_UP)
|
|
press(e.KEY_UP)
|
|
press(e.KEY_LEFT)
|
|
press(e.KEY_LEFT)
|
|
press(e.KEY_LEFT)
|
|
press(e.KEY_LEFT)
|
|
time.sleep(0.1)
|
|
type_string(name.lower())
|
|
time.sleep(0.3)
|
|
press(e.KEY_DOWN)
|
|
press(e.KEY_DOWN)
|
|
press(e.KEY_ENTER)
|
|
time.sleep(0.2)
|
|
press(e.KEY_ENTER)
|
|
|
|
from http.server import BaseHTTPRequestHandler, HTTPServer
|
|
from urllib.parse import urlparse, parse_qs
|
|
|
|
class Handler(BaseHTTPRequestHandler):
|
|
def do_GET(self):
|
|
# Parse URL
|
|
parsed = urlparse(self.path)
|
|
query = parse_qs(parsed.query)
|
|
|
|
# Get parameter (e.g. ?=hello)
|
|
msg = query.get("game", [""])[0]
|
|
|
|
print(f"Received msg: {msg}")
|
|
|
|
run_a_game(msg)
|
|
# Send response
|
|
self.send_response(200)
|
|
self.send_header("Content-type", "text/plain")
|
|
self.end_headers()
|
|
self.wfile.write(f"OK: {msg}".encode())
|
|
|
|
# Start server
|
|
port = 8111
|
|
server = HTTPServer(("0.0.0.0", port), Handler)
|
|
|
|
print(f"Listening on http://0.0.0.0:{port}")
|
|
server.serve_forever()
|