66 lines
1.8 KiB
Plaintext
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)
|