import json import socket import threading from Classes.System.Network.Handler.EventHandler import UDPEventHandler, TCPEventHandler class NetworkManager: class UDP: __Addr:str __Port:str __BufferSize:int = 1024 __udpSocket:socket __UDPClientThread:threading.Thread __eventHandler: UDPEventHandler def __init__(self, Addr:str, Port:str): clientUdpSocket, clientUdpAddress = self.__udpSocket.accept() self.__Addr = Addr self.__Port = Port self.__eventHandler = UDPEventHandler(clientUdpSocket) self.__UDPClientThread = threading.Thread(target=self.handleUDPConnection, args=(clientUdpSocket, clientUdpAddress)) self.__UDPClientThread.start() # handles ticking the game loop server side converting data and passing of to the event handler def handleUDPConnection(self, socket:socket, address): # states that a connection has been established print(f"Connected with {address}") # Communication with client while True: data = socket.recv(self.__bufferSize) if not data: break # decode message for handling message = data.decode() messageJson = json.loads(message) if messageJson["user"] in self.__users: self.__eventHandler.handleUDPEvents(messageJson) else: break print(f"received message from {address}: {message}") def send(payload:bytes): # todo: lookup how to send data pass class TCP: __Addr:str __Port:str __BufferSize:int = 1024 __tcpSocket:socket __TCPClientThread:threading.Thread __eventHandler:TCPEventHandler def __init__(self, Addr:str, Port:str): clientTcpSocket, clientTcpAddress = self.__tcpSocket.accept() self.__Addr = Addr self.__Port = Port self.__eventHandler = TCPEventHandler(clientTcpSocket) self.__TCPClientThread = threading.Thread(target=self.handleTCPConnection, args=(clientTcpSocket, clientTcpAddress)) self.__TCPClientThread.start() # handles ticking the game loop server side converting data and passing of to the event handler def handleTCPConnection(self, socket:socket, address): # states that a connection has been established print(f"Connected with {address}") # Communication with client while True: data = socket.recv(1024) if not data: break # decode message for handling message = data.decode() messageJson = json.loads(message) if messageJson["user"] in self.__users: self.__eventHandler.handleTCPEvents(messageJson) else: break print(f"received message from {address}: {message}") def send(payload:bytes): # todo: lookup how to send data pass tcp: TCP udp: UDP def __init__(self, Addr:str, TCPPort:str, UDPPort:str): self.tcp = self.TCP(Addr, TCPPort) self.udp = self.UDP(Addr, UDPPort)