/
HIDremServer.py
61 lines (51 loc) · 1.37 KB
/
HIDremServer.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
"""The server module for HIDrem."""
import threading
from pymouse import PyMouse
from pykeyboard import PyKeyboard
import common
import com
class HIDremServerProtocol(com.LengthPrefixedReceiver):
"""The communication protocol."""
def setup(self):
self.k = PyKeyboard()
self.m = PyMouse()
def got_message(self, msg):
"""called when a message was received."""
if not msg:
return
idb, msg = msg[0], msg[1:]
if idb == common.ID_PING:
# echo message
self.send_message(idb + msg)
elif idb == common.ID_KEYBOARD:
action, keyname = msg[0], msg[1:]
if action == common.ACTION_PRESS:
self.k.press_key(keyname)
elif action == common.ACTION_RELEASE:
self.k.release_key(keyname)
else:
# protocol violation
self.close()
elif idb == common.ID_MOUSE:
pass
else:
# protocol violation
self.close()
class HIDremServer(object):
"""The Server."""
def __init__(self):
self.manager = com.ConnectionManager()
self.port = self.manager.listen("0.0.0.0", 0, HIDremServerProtocol)
def run(self):
"""enters the mainloop and start background jobs."""
thr = threading.Thread(
name="Broadcasting Thread",
target=com.broadcast,
args=(self.port, )
)
thr.daemon = True
thr.start()
self.manager.run()
if __name__ == "__main__":
server = HIDremServer()
server.run()