Add SaaS backend

This backend works just like the X11 backend, except it starts HamClock
on its own rather than relying on an existing instance. As the name
implies, it is intended for SaaS environments where multiple HamClocks
may be running on a single machine, and running unused instances would
be a significant waste of resources.
This commit is contained in:
Samuel Sloniker 2021-07-10 18:51:15 -07:00
parent 98bcce60e3
commit 92337cb000

38
server/backends/saas.py Normal file
View File

@ -0,0 +1,38 @@
import os
import subprocess
import threading
import time
def _long_touch(x, y):
os.environ['DISPLAY'] = config['display']
subprocess.run(['xdotool', 'mousemove', str(x), str(y), 'mousedown', '1'])
time.sleep(2)
subprocess.run(['xdotool', 'mouseup', '1'])
def get_img():
os.environ['DISPLAY'] = config['display']
xwd = subprocess.Popen(['xwd', '-root', '-silent'], stdout=subprocess.PIPE)
convert = subprocess.Popen(['convert', 'xwd:-', 'bmp:img.bmp'], stdin=xwd.stdout)
convert.wait()
return 'img.bmp'
def touch(x, y, is_long):
os.environ['DISPLAY'] = config['display']
if is_long:
threading.Thread(target=_long_touch, args=(x, y,)).start()
else:
subprocess.run(['xdotool', 'mousemove', str(x), str(y), 'click', '1'])
def connect():
global _hamclock
os.environ['DISPLAY'] = config['display']
_hamclock = subprocess.Popen(config['hamclock_bin'])
def disconnect():
_hamclock.terminate()
_hamclock.wait()