generated from Labyricorn/labyricorn-project-template
53 lines
1.6 KiB
Python
53 lines
1.6 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
CyberSim OS - Standalone Offline Local Launcher
|
|
Zero external dependencies. Binds strictly to 127.0.0.1 and opens default browser.
|
|
"""
|
|
|
|
import os
|
|
import sys
|
|
import http.server
|
|
import socketserver
|
|
import webbrowser
|
|
import threading
|
|
import time
|
|
|
|
PORT = 8080
|
|
HOST = '127.0.0.1'
|
|
|
|
class CustomHandler(http.server.SimpleHTTPRequestHandler):
|
|
def __init__(self, *args, **kwargs):
|
|
src_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'src')
|
|
super().__init__(*args, directory=src_dir, **kwargs)
|
|
|
|
def log_message(self, format, *args):
|
|
pass
|
|
|
|
def start_server():
|
|
server = None
|
|
for port in range(PORT, PORT + 20):
|
|
try:
|
|
server = socketserver.TCPServer((HOST, port), CustomHandler)
|
|
print(f"============================================================")
|
|
print(f" CyberSim OS - Offline Simulation Environment")
|
|
print(f" Running locally at: http://{HOST}:{port}")
|
|
print(f" Press Ctrl+C to stop the launcher")
|
|
print(f"============================================================")
|
|
|
|
def open_browser():
|
|
time.sleep(0.6)
|
|
webbrowser.open(f"http://{HOST}:{port}")
|
|
|
|
threading.Thread(target=open_browser, daemon=True).start()
|
|
server.serve_forever()
|
|
break
|
|
except OSError:
|
|
continue
|
|
|
|
if __name__ == '__main__':
|
|
try:
|
|
start_server()
|
|
except KeyboardInterrupt:
|
|
print("\nCyberSim OS stopped.")
|
|
sys.exit(0)
|