Created
February 13, 2020 23:17
-
-
Save edg-l/eb591a6b29b5356695ecd51f6d9a7d62 to your computer and use it in GitHub Desktop.
tw server start
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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