2024-01-04 01:28:28 +01:00

103 lines
3.3 KiB
Python

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)