servii-backend/server_mc_manager.py

60 lines
2.0 KiB
Python
Raw Normal View History

2024-06-14 21:33:55 +00:00
import subprocess
import shlex
class MinecraftServerManager:
def __init__(self):
self.servers = {}
def start_server(self, server_directory, java_executable='java', jar_file='server.jar', memory_size='2048M'):
command = f"{java_executable} -Xmx{memory_size} -Xms{memory_size} -jar {jar_file} > /dev/null"
process = subprocess.Popen(shlex.split(command), cwd=server_directory, stdin=subprocess.PIPE)
server_id = len(self.servers) + 1
self.servers[server_id] = {
'process': process,
'directory': server_directory,
'port': None
}
print(f"Started server {server_id} in directory {server_directory}")
return server_id
def execute_server_command(self, server_id, command):
if server_id in self.servers:
process = self.servers[server_id]['process']
process.stdin.write(command.encode() + b'\n')
print(f"Server {server_id} executed command : {command}")
else:
print(f"No server found with ID {server_id}")
def stop_server(self, server_id):
if server_id in self.servers:
process = self.servers[server_id]['process']
process.communicate(input=b"stop\n")
del self.servers[server_id]
print(f"Stopped server {server_id}")
else:
print(f"No server found with ID {server_id}")
def stop_server_focefully(self, server_id):
if server_id in self.servers:
process = self.servers[server_id]['process']
process.terminate()
del self.servers[server_id]
print(f"Stopped server {server_id}")
else:
print(f"No server found with ID {server_id}")
def get_servers(self):
return self.servers.values()
def get_server_id_by_port(self, port):
for server_id, server_info in self.servers.items():
if server_info['port'] == port:
return server_id
return None
if __name__ == "__main__":
pass