root/software/hbkcd/server.py @ 5ff1de98
| c19f51da | David Sorber | #!/usr/bin/python3
|
|
from http.server import BaseHTTPRequestHandler, HTTPServer
|
|||
import json
|
|||
from multiprocessing import Process
|
|||
import sys
|
|||
import time
|
|||
# https://blog.gocept.com/2011/08/04/shutting-down-an-httpserver/
|
|||
# https://docs.aws.amazon.com/polly/latest/dg/example-Python-server-code.html
|
|||
class CommandServer(Process):
|
|||
def __init__(self):
|
|||
Process.__init__(self)
|
|||
self.server_address = ('127.0.0.1', 8081)
|
|||
self.httpd = HTTPServer(self.server_address, CommandHandler)
|
|||
self.keep_running = True
|
|||
def stop(self):
|
|||
print('stop called')
|
|||
self.keep_running = False
|
|||
# ~ if self.httpd:
|
|||
# ~ print('pre shutdown')
|
|||
# ~ self.httpd.shutdown()
|
|||
# ~ print('post shutdown')
|
|||
self.httpd.shutdown()
|
|||
self.httpd.socket.close()
|
|||
# ~ self.httpd.server_close()
|
|||
print('stop returning')
|
|||
def run(self):
|
|||
print('command server running')
|
|||
# ~ while self.keep_running:
|
|||
self.httpd.serve_forever()
|
|||
# ~ while self.keep_running:
|
|||
# ~ self.httpd.handle_request()
|
|||
print('command server stopping')
|
|||
# HTTPRequestHandler class
|
|||
class CommandHandler(BaseHTTPRequestHandler):
|
|||
# GET
|
|||
def do_GET(self):
|
|||
# Strip off leading and/or trailing slashes
|
|||
path = self.path.strip('/')
|
|||
# Defaults
|
|||
response_code = 400
|
|||
response_type = 'text/html'
|
|||
response_data = ''
|
|||
# Send response status code
|
|||
if path == 'queue':
|
|||
response_code = 200
|
|||
response_dict = {'queue': ['alpha', 'bravo', 'charlie']}
|
|||
response_data = json.dumps(response_dict).encode()
|
|||
elif not path:
|
|||
response_code = 200
|
|||
response = 'Why hello there'
|
|||
response_data = response.encode('utf-8')
|
|||
# Send response and data, if any
|
|||
self.send_response(response_code)
|
|||
if response_data:
|
|||
self.send_header('Content-type', response_type)
|
|||
self.end_headers()
|
|||
if response_data:
|
|||
self.wfile.write(response_data)
|
|||
return
|
|||
def main():
|
|||
print('starting server...')
|
|||
# Server settings
|
|||
# Choose port 8080, for port 80, which is normally used for a http server,
|
|||
# you need root access
|
|||
# ~ server_address = ('127.0.0.1', 8081)
|
|||
# ~ httpd = HTTPServer(server_address, CommandHandler)
|
|||
# ~ print('running server...')
|
|||
# ~ httpd.serve_forever()
|
|||
cmd_server = CommandServer()
|
|||
cmd_server.start()
|
|||
# Run for a while
|
|||
for idx in range(20):
|
|||
print(idx)
|
|||
time.sleep(1)
|
|||
# Simluate a clean shutdown
|
|||
cmd_server.stop()
|
|||
print('post stop')
|
|||
cmd_server.join()
|
|||
print('fin')
|
|||
if __name__ == '__main__':
|
|||
sys.exit(main())
|