-
Notifications
You must be signed in to change notification settings - Fork 2
/
scoreboard_local_server.py
94 lines (84 loc) · 3.1 KB
/
scoreboard_local_server.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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
import json
import mimetypes
import os
from werkzeug.wrappers import Request, Response
from werkzeug.serving import run_simple
from threading import Thread
from dev_hero_selector import ScoreboardGui
class ScoreboardHTTPServer:
@Request.application
def application(self, request: Request):
path = request.path
if request.path == '/':
path = '/overlay.html'
path = os.path.join(os.path.dirname(__file__), 'scoreboard', os.path.normpath(path)[1:])
if os.path.exists(path):
if 'html' in path or 'js' in path:
lines = []
enabled = True
with open(path, 'r') as f:
for line in f.readlines():
if '<!-- BEGIN: twitch -->' in line:
enabled = False
if enabled:
lines.append(line)
if '<!-- END: twitch -->' in line:
enabled = True
return Response(''.join(lines), content_type=mimetypes.guess_type(path)[0])
else:
with open(path, 'rb') as f:
return Response(f.read(), content_type=mimetypes.guess_type(path)[0])
elif request.path == '/scoreboard.json':
data = self.gui.data
data['postgame'] = {
'role': 'tank',
'result': 'win',
'map': 'blizzard-world',
'hero': 'zarya',
'timestamp': 1591246479.8514,
'description': '1 rounds',
'duration': '11.0 min',
'link': 'https://overtrack.gg/overwatch/games/synap53/2020-06-04-04-54-k4fJn7',
'stats': [
{
'key': 'Eliminations',
'value': '17'
},
{
'key': 'Hero Damage Done',
'value': '6773'
},
{
'key': 'Objective Kills',
'value': '6'
},
{
'key': 'Healing Done',
'value': '0'
},
{
'key': 'Objective Time',
'value': '00:02:06'
},
{
'key': 'Deaths',
'value': '9'
}
]
}
return Response(
json.dumps(data),
content_type='application/json',
headers={
'Access-Control-Allow-Origin': '*'
}
)
else:
return Response(status=404)
def __init__(self, address='localhost', port=8000):
self.thread = Thread(target=run_simple, args=(address, port, self.application), daemon=True)
self.gui = ScoreboardGui.create()
self.thread.start()
self.gui.run()
if __name__ == '__main__':
ScoreboardHTTPServer()