Files
2025-09-30 18:18:27 -04:00

66 lines
1.8 KiB
Plaintext

import subprocess
import signal
import sys
import os
import threading
import time
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
STUNNEL_CONF = os.path.join(BASE_DIR, "wii-wfc-dev", "stunnel", "stunnel.conf")
STUNNEL_LOG = os.path.join(BASE_DIR, "wii-wfc-dev", "stunnel", "stunnel.log")
processes = []
def start_process(name, cmd):
print(f"[+] Starting {name}...")
p = subprocess.Popen(cmd, cwd=BASE_DIR)
processes.append(p)
return p
def tail_log(filepath):
""" Continuously print new lines from stunnel.log """
while True:
try:
with open(filepath, "r") as f:
f.seek(0, os.SEEK_END)
while True:
line = f.readline()
if not line:
time.sleep(0.5)
continue
print(f"[stunnel] {line.strip()}")
except FileNotFoundError:
time.sleep(1)
def stop_all(signum, frame):
print("\nStopping all services...")
for p in processes:
try:
p.terminate()
except Exception:
pass
sys.exit(0)
if __name__ == "__main__":
print("=== Starting all services in one terminal ===")
print("Press CTRL+C to stop everything.\n")
# Start services
start_process("DNS Server", ["python", "dnsserver.py"])
start_process("Game Server", ["python", "server.py"])
start_process("stunnel (TLS Proxy)", ["stunnel", STUNNEL_CONF])
# Start log tailing in a background thread
t = threading.Thread(target=tail_log, args=(STUNNEL_LOG,), daemon=True)
t.start()
# Handle CTRL+C
signal.signal(signal.SIGINT, stop_all)
# Windows-compatible keep-alive loop
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
stop_all(None, None)