-
Notifications
You must be signed in to change notification settings - Fork 0
/
server.py
91 lines (65 loc) · 2.88 KB
/
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
#!/usr/bin/env python
'''
This is an example server application, using the tornado handlers,
that you can use to connect your dashboard to your robot viaNetworkTables.
Run this script with python, then you can use npm to open the dashboard,
or open http://localhost:8888/ in your browser.
'''
from os.path import abspath, dirname, exists, join
from optparse import OptionParser
import tornado.web
from tornado.ioloop import IOLoop
from networktables import NetworkTable
from pynetworktables2js import get_handlers, NonCachingStaticFileHandler
import logging
logger = logging.getLogger('dashboard')
log_datefmt = '%H:%M:%S'
log_format = '%(asctime)s:%(msecs)03d %(levelname)-8s: %(name)-20s: %(message)s'
def init_networktables(options):
if options.dashboard:
logger.info('Connecting to networktables in Dashboard mode')
NetworkTable.setDashboardMode()
else:
logger.info('Connecting to networktables at %s', options.robot)
NetworkTable.setIPAddress(options.robot)
NetworkTable.setClientMode()
NetworkTable.initialize()
logger.info('Networktables Initialized')
if __name__ == '__main__':
# Setup options here
parser = OptionParser()
parser.add_option('-p', '--port', default=8888,
help='Port to run web server on')
parser.add_option('-v', '--verbose', default=False, action='store_true',
help='Enable verbose logging')
parser.add_option('--robot', default='127.0.0.1',
help='Robot\'s IP address')
parser.add_option('--dashboard', default=False, action='store_true',
help='Use this instead of --robot to receive the IP from the driver station. WARNING: It will not work if you are not on the same host as the DS!')
options, args = parser.parse_args()
# Setup logging
logging.basicConfig(datefmt=log_datefmt,
format=log_format,
level=logging.DEBUG if options.verbose else logging.INFO)
if options.dashboard and options.robot != '127.0.0.1':
parser.error('Cannot specify --robot and --dashboard')
# Setup NetworkTables
init_networktables(options)
# setup tornado application with static handler + networktables support
www_dir = abspath(dirname(__file__))
index_html = join(www_dir, 'index.html')
if not exists(www_dir):
logger.error('Directory \'%s\' does not exist!', www_dir)
exit(1)
if not exists(index_html):
logger.warn('%s not found' % index_html)
app = tornado.web.Application(
get_handlers() + [
(r'/()', NonCachingStaticFileHandler, {'path': index_html}),
(r'/(.*)', NonCachingStaticFileHandler, {'path': www_dir})
]
)
# Start the app
logger.info('Listening on http://localhost:%s/', options.port)
app.listen(options.port)
IOLoop.current().start()