From c9093982e93c598ecb8c6ed37fff146a13f6f304 Mon Sep 17 00:00:00 2001 From: Sascha Ludwig Date: Wed, 20 Feb 2019 15:52:37 +0100 Subject: [PATCH] added settings for httpport, implemented basic http server --- settings.ui | 10 ++++++++ settings_functions.py | 4 ++- start.py | 58 +++++++++++++++++++++++++++++++++++++++++-- 3 files changed, 69 insertions(+), 3 deletions(-) diff --git a/settings.ui b/settings.ui index fe61314..88e78f0 100644 --- a/settings.ui +++ b/settings.ui @@ -1363,6 +1363,16 @@ + + + + HTTP Port + + + + + + diff --git a/settings_functions.py b/settings_functions.py index 1a0fa5c..95bfd14 100644 --- a/settings_functions.py +++ b/settings_functions.py @@ -42,7 +42,7 @@ from collections import defaultdict import json -versionString = "0.9beta2" +versionString = "0.9beta4" # class OASSettings for use from OAC @@ -261,6 +261,7 @@ def restoreSettingsFromConfig(self): settings.beginGroup("Network") self.udpport.setText(settings.value('udpport', '3310')) + self.httpport.setText(settings.value('httpport', '8010')) settings.endGroup() settings.beginGroup("Formatting") @@ -340,6 +341,7 @@ def getSettingsFromDialog(self): settings.beginGroup("Network") settings.setValue('udpport', self.udpport.displayText()) + settings.setValue('httpport', self.httpport.displayText()) settings.endGroup() settings.beginGroup("Formatting") diff --git a/start.py b/start.py index 26eeb6f..2fa3221 100755 --- a/start.py +++ b/start.py @@ -48,7 +48,11 @@ import ntplib import signal import socket -from settings_functions import Settings +from settings_functions import Settings, versionString + +from http.server import BaseHTTPRequestHandler, HTTPServer + +HOST, PORT = '127.0.0.1', 12345 class MainScreen(QWidget, Ui_MainScreen): @@ -174,6 +178,10 @@ def __init__(self): self.udpsock.bind(port, QUdpSocket.ShareAddress) self.udpsock.readyRead.connect(self.cmdHandler) + # Setup HTTP Server + self.httpd = HttpDaemon(self) + self.httpd.start() + # display all host addresses self.displayAllHostaddresses() @@ -1045,6 +1053,9 @@ def shutdown_host(self): cmd = "shutdown -f -t 0" pass + def closeEvent(self, event): + self.httpd.stop() + class checkNTPOffsetThread(QThread): @@ -1086,7 +1097,50 @@ def run(self): self.oas.ntpHadWarning = True -################################### +class HttpDaemon(QThread): + def run(self): + settings = QSettings(QSettings.UserScope, "astrastudio", "OnAirScreen") + settings.beginGroup("Network") + port = int(settings.value('httpport', 8010)) + settings.endGroup() + + Handler = OASHTTPRequestHandler + self._server = HTTPServer((HOST, port), Handler) + self._server.serve_forever() + + def stop(self): + self._server.shutdown() + self._server.socket.close() + self.wait() + + +class OASHTTPRequestHandler(BaseHTTPRequestHandler): + server_version = "OnAirScreen/%s" % versionString + # handle HEAD request + def do_HEAD(self): + self.send_response(200) + self.send_header("Content-type", "text/html") + self.end_headers() + + # handle GET command + def do_GET(self): + print(self.path) + try: + if self.path.startswith('/CMD'): + self.send_response(200) + + # send header first + self.send_header('Content-type', 'text-html') + self.end_headers() + + # send file content to client + self.wfile.write(b"YEAH") + return + + except IOError: + self.send_error(404, 'file not found') + + ################################### # App SIGINT handler ################################### def sigint_handler(*args):