Skip to content

Instantly share code, notes, and snippets.

@edg-l
Created February 13, 2020 23:17
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save edg-l/eb591a6b29b5356695ecd51f6d9a7d62 to your computer and use it in GitHub Desktop.
Save edg-l/eb591a6b29b5356695ecd51f6d9a7d62 to your computer and use it in GitHub Desktop.
tw server start
import os
import sys
import subprocess
import signal
import time
from typing import List
basedir = os.path.dirname(os.path.realpath(__file__))
files = os.listdir(basedir)
cfgfiles = []
for file in files:
if os.path.isfile(file) and file.split(".")[-1] == "cfg":
cfgfiles.append(file)
class Server:
def __init__(self, file: str):
self.file = file
self.process = None
def start(self):
with open(f'{self.file}.log', 'w') as logfile:
print(f"Started server {self.file}")
if self.file == "teesmash.cfg":
self.process = subprocess.Popen(['./teesmash_srv', '-f', self.file], cwd=basedir, stdout=logfile, stderr=logfile)
else:
self.process = subprocess.Popen(['./teeworlds_srv', '-f', self.file], cwd=basedir, stdout=logfile, stderr=logfile)
servers: List[Server] = []
def stop_servers(signum, frame):
for server in servers:
if server.process:
server.process.terminate()
sys.exit()
signal.signal(signal.SIGINT, stop_servers)
signal.signal(signal.SIGTERM, stop_servers)
for file in cfgfiles:
server = Server(file)
server.start()
servers.append(server)
while True:
for server in servers:
if server.process is not None and server.process.poll() is not None:
server.start()
time.sleep(5)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment