from http.server import HTTPServer
from socketserver import ThreadingMixIn

from Code.Communication.Neighbours import Neighbours
from Code.Communication.RequestHandler import RequestHandler
from Code.UI.PlayingField import GameState


class ThreadedHTTPServer(ThreadingMixIn, HTTPServer):
	""" This class allows to handle requests in separated threads.
		No further content needed, don't touch this. """


class Server:
	def __init__(self, neighbours: Neighbours,game_state:GameState):
		self.server = None
		self.neighbours = neighbours
		self.game_state = game_state
		self.port = neighbours.own_process.port
		self.ip = neighbours.own_process.ip

	def stop_server(self):
		print("Trying to stop server")
		self.server.shutdown()

	def start(self):
		RequestHandler.neighbours = self.neighbours
		RequestHandler.game_state = self.game_state
		print(f"HTTP Server Running on {self.ip}: {self.port}")
		self.server = ThreadedHTTPServer((self.ip, self.port), RequestHandler)
		self.server.serve_forever()
		print("Stopped server")
