Sure
This commit is contained in:
@@ -0,0 +1,65 @@
|
||||
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)
|
||||
Reference in New Issue
Block a user