from flask import Flask from http.server import HTTPServer, BaseHTTPRequestHandler from consts import DB_NAME, COLLECTION, SSL_CERT_PATH, SSL_KEY_PATH, HOST, PORT from map.get_markers import get_all_markers import ssl import keyboard import sqlite3 app = Flask(__name__) terminate_server = 0 # Initialise SQLite database connection def init_database(): #try: # Connect to the SQLite database conn = sqlite3.connect('server/sql_db/icedb') # Return the connection object return conn #except Exception as e: # print(f"Failed to connect to SQLite database: {e}") # return None 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 # Define custom HTTP class class IceHTTP(BaseHTTPRequestHandler): def __init__(self, request, client_address, server): self.cursor = server.cursor # Accessing cursor from server super().__init__(request, client_address, server) def do_GET(self): # Root path if self.path == '/': self.send_response(200) self.send_header("Content-type", "text/plain") self.end_headers() self.wfile.write(b"Root path hit!") # Update_map endpoint elif self.path == '/update_map': # NB: should be POST? get_all_markers(self, self.cursor) # Accessing cursor from self # Listen for pressing of q key to terminate server 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__": # Initialise database connection conn = init_database() cursor = conn.cursor() try: # 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}")