-
Sara Savanovic Djordjevic authoredSara Savanovic Djordjevic authored
main.py 2.66 KiB
from flask import Flask
from http.server import HTTPServer, BaseHTTPRequestHandler
from consts import SSL_CERT_PATH, SSL_KEY_PATH, HOST, PORT
from map.get_markers import get_all_markers
from APIs.get_weather import get_weather
import ssl
import keyboard
import sqlite3
app = Flask(__name__)
terminate_server = 0
class IceHTTPServer(HTTPServer):
def __init__(self, server_address, handler_class, cursor):
super().__init__(server_address, handler_class)
self.cursor = cursor
def get_request(self):
request, client_address = super().get_request()
return request, client_address
# Custom HTTP class
class IceHTTP(BaseHTTPRequestHandler):
def __init__(self, request, client_address, server):
self.cursor = server.cursor
super().__init__(request, client_address, server)
def do_GET(self):
# Root path
if self.path == '/': # NB: temporary root path behavior
self.send_response(200)
self.send_header("Content-type", "text/plain")
self.end_headers()
self.wfile.write(b"Root path hit!")
elif self.path == '/update_map': # NB: should be POST?
get_all_markers(self, self.cursor, False) # Get all markers
elif self.path == '/get_valid_markers': # NB: should be POST?
get_all_markers(self, self.cursor, True) # Get only valid markers
def do_POST(self):
if self.path == '/get_weather_data':
get_weather(self)
# Terminate server on key press q
def on_key_press(server, event, cursor, conn):
if event.name == 'q':
print('Terminating server...')
server.server_close()
cursor.close()
conn.close()
keyboard.unhook_all()
quit()
# Start a server on port 8443 using self defined HTTP class
if __name__ == "__main__":
try:
# Initialize database connection
conn = sqlite3.connect('server/sql_db/icedb')
cursor = conn.cursor()
# Load SSL certificate and private key
ssl_context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
ssl_context.load_cert_chain(SSL_CERT_PATH, SSL_KEY_PATH)
# Create HTTP server with SSL support
server = IceHTTPServer((HOST, PORT), IceHTTP, cursor)
server.socket = ssl_context.wrap_socket(server.socket, server_side=True)
print("Server running on port ", PORT)
# Register key press event handler
keyboard.on_press(lambda event: on_key_press(server, event, cursor, conn))
print("Server running on port ", PORT)
# Run server indefinitely
server.serve_forever()
except Exception as e:
print(f"Server terminated: {PORT}: {e}")