forked from galeswift/fftracker
/
AutoTrack.py
66 lines (55 loc) · 1.78 KB
/
AutoTrack.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
62
63
64
65
66
import asyncio
import websockets
import json
import threading
import socketserver
connected = set()
globe = {}
async def handle_client(reader, writer):
print("AutoTracking Lua Connected")
request = None
global globe
global connected
while request != 'quit':
try:
request = (await reader.readline()).decode('utf8')
print(request)
x=json.loads(request)
print(json.dumps(x, sort_keys=True, indent=4))
except:
print("AutoTracking Lua Disconnected")
break
if 'metadata' in x:
globe=x
for ws in connected:
try:
await ws.send(json.dumps(x, sort_keys=True, indent=4))
except:
print("Error, a connection was dropped")
writer.close()
async def run_server():
server = await asyncio.start_server(handle_client, 'localhost', 54321)
async with server:
await server.serve_forever()
async def handler(websocket, path):
print("A Tracking WebServer Connected")
global connected
global globe
connected.add(websocket)
try:
await websocket.send(json.dumps(globe, sort_keys=True, indent=4))
while True:
name = await websocket.recv()
print("< {}".format(name))
except:
print("A Tracking WebServer Disconnected")
connected.remove(websocket)
def Thread1():
asyncio.run(run_server())
x = threading.Thread(target=Thread1)
x.start()
loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)
start_server = websockets.serve(handler, 'localhost', 8765)
asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever()