mirror of
https://github.com/DerTyp7/docker_minecraft_server_auto_starter.git
synced 2025-10-29 12:42:09 +01:00
Fix request handler restart issue
This commit is contained in:
@@ -10,11 +10,17 @@ class RequestHandler(threading.Thread):
|
|||||||
self.port = port
|
self.port = port
|
||||||
self.docker_handler = docker_handler
|
self.docker_handler = docker_handler
|
||||||
self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||||
|
self.sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
|
||||||
server_address = ('localhost', self.port)
|
server_address = ('localhost', self.port)
|
||||||
print(f'Starting up on {server_address[0]} port {server_address[1]}')
|
print(f'Starting up on {server_address[0]} port {server_address[1]}')
|
||||||
self.sock.bind(server_address)
|
self.sock.bind(server_address)
|
||||||
self.sock.listen(1)
|
self.sock.listen(1)
|
||||||
|
|
||||||
|
def restart(self):
|
||||||
|
print(f'Restarting request handler for port {self.port}')
|
||||||
|
self.sock.close()
|
||||||
|
self.__init__(self.port, self.docker_handler)
|
||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
while True:
|
while True:
|
||||||
try:
|
try:
|
||||||
@@ -23,12 +29,18 @@ class RequestHandler(threading.Thread):
|
|||||||
try:
|
try:
|
||||||
print('Connection from', self.client_address)
|
print('Connection from', self.client_address)
|
||||||
self.handle_request()
|
self.handle_request()
|
||||||
|
except Exception as e:
|
||||||
|
print(
|
||||||
|
f'Error in request handler for port {self.port}: {e}')
|
||||||
|
print('Restarting request handler...')
|
||||||
|
self.restart()
|
||||||
finally:
|
finally:
|
||||||
self.connection.close()
|
self.connection.close()
|
||||||
|
self.restart()
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(f'Error in request handler for port {self.port}: {e}')
|
print(f'Error in request handler for port {self.port}: {e}')
|
||||||
print('Restarting request handler...')
|
print('Restarting request handler...')
|
||||||
self.__init__(self.port, self.docker_handler)
|
self.restart()
|
||||||
|
|
||||||
def handle_request(self):
|
def handle_request(self):
|
||||||
print(f'Handling request on port {self.port}')
|
print(f'Handling request on port {self.port}')
|
||||||
@@ -38,7 +50,8 @@ class RequestHandler(threading.Thread):
|
|||||||
container_ip)
|
container_ip)
|
||||||
isStarting = self.docker_handler.is_container_starting(container)
|
isStarting = self.docker_handler.is_container_starting(container)
|
||||||
request = self.connection.recv(1024)
|
request = self.connection.recv(1024)
|
||||||
if request[0] == 0x10:
|
print(f'Received request: {request}')
|
||||||
|
if request[0] == 0x10 or request[0] == 0x15:
|
||||||
if b'\x01' in request:
|
if b'\x01' in request:
|
||||||
print(f'Detected ping request for {container_ip}')
|
print(f'Detected ping request for {container_ip}')
|
||||||
self.forward_request_to_placeholder(request, isStarting)
|
self.forward_request_to_placeholder(request, isStarting)
|
||||||
@@ -56,9 +69,12 @@ class RequestHandler(threading.Thread):
|
|||||||
elif request[0] == 0xFE:
|
elif request[0] == 0xFE:
|
||||||
print(f'Detected legacy ping request for {container_ip}')
|
print(f'Detected legacy ping request for {container_ip}')
|
||||||
self.forward_request_to_placeholder(request, isStarting)
|
self.forward_request_to_placeholder(request, isStarting)
|
||||||
|
|
||||||
else:
|
else:
|
||||||
print(f'No container mapped to port {self.port}')
|
print(f'Detected unknown request for {container_ip}')
|
||||||
|
self.forward_request_to_placeholder(request, isStarting)
|
||||||
|
|
||||||
|
else:
|
||||||
|
print(f'No container mapped to port {self.port}')
|
||||||
|
|
||||||
def forward_request_to_placeholder(self, request, isStarting=False):
|
def forward_request_to_placeholder(self, request, isStarting=False):
|
||||||
print('Forwarding request to placeholder server')
|
print('Forwarding request to placeholder server')
|
||||||
@@ -71,8 +87,11 @@ class RequestHandler(threading.Thread):
|
|||||||
if not ip:
|
if not ip:
|
||||||
print('No placeholder server IP found')
|
print('No placeholder server IP found')
|
||||||
return
|
return
|
||||||
server_socket.connect(
|
try:
|
||||||
(ip, 25565))
|
server_socket.connect((ip, 25565))
|
||||||
server_socket.sendall(request)
|
server_socket.sendall(request)
|
||||||
response = server_socket.recv(1024)
|
response = server_socket.recv(1024)
|
||||||
self.connection.sendall(response)
|
self.connection.sendall(response)
|
||||||
|
except Exception as e:
|
||||||
|
print(f'Error while handling request on port {self.port}: {e}')
|
||||||
|
self.restart()
|
||||||
|
|||||||
Reference in New Issue
Block a user