85 lines
2.9 KiB
Python
85 lines
2.9 KiB
Python
import json
|
|
import socket
|
|
import threading
|
|
|
|
from Classes.System.Network.EventHandler import TCPEventHandler, UDPEventHandler
|
|
|
|
class NetworkManager:
|
|
class UDP:
|
|
def __init__(self, addr: str, port: str):
|
|
self.addr = addr
|
|
self.port = int(port)
|
|
self.udpSocket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
|
|
self.eventHandler = UDPEventHandler(self.udpSocket)
|
|
|
|
try:
|
|
self.udpSocket.bind((self.addr, self.port))
|
|
except Exception as e:
|
|
print(f"Error binding UDP socket: {e}")
|
|
|
|
# start listener thread
|
|
self.listen()
|
|
|
|
def send(self, message: dict):
|
|
try:
|
|
self.udpSocket.sendto(json.dumps(message).encode(), (self.addr, self.port))
|
|
except Exception as e:
|
|
print(f"Error sending UDP data: {e}")
|
|
|
|
# starts a listener thread for udp data
|
|
def receive(self):
|
|
while True:
|
|
try:
|
|
data, addr = self.udpSocket.recvfrom(1024)
|
|
if data:
|
|
decoded_data = json.loads(data.decode())
|
|
self.eventHandler.handleEvents(decoded_data)
|
|
except Exception as e:
|
|
print(f"Error receiving UDP data: {e}")
|
|
break
|
|
|
|
def listen(self):
|
|
udpThread = threading.Thread(target=self.receive)
|
|
udpThread.daemon = True
|
|
udpThread.start()
|
|
|
|
class TCP:
|
|
def __init__(self, addr: str, port: str):
|
|
self.addr = addr
|
|
self.port = int(port)
|
|
self.tcpSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
|
self.eventHandler = TCPEventHandler(self.tcpSocket)
|
|
|
|
try:
|
|
self.tcpSocket.connect((self.addr, self.port))
|
|
except Exception as e:
|
|
print(f"Error connecting TCP socket: {e}")
|
|
|
|
# Starten des Listener-Threads
|
|
self.listen()
|
|
|
|
def send(self, message: dict):
|
|
try:
|
|
self.tcpSocket.sendall(json.dumps(message).encode())
|
|
except Exception as e:
|
|
print(f"Error sending TCP data: {e}")
|
|
|
|
def receive(self):
|
|
while True:
|
|
try:
|
|
data = self.tcpSocket.recv(1024)
|
|
if data:
|
|
decoded_data = json.loads(data.decode())
|
|
self.eventHandler.handleEvents(decoded_data)
|
|
except Exception as e:
|
|
print(f"Error receiving TCP data: {e}")
|
|
break
|
|
|
|
def listen(self):
|
|
tcpThread = threading.Thread(target=self.receive)
|
|
tcpThread.daemon = True
|
|
tcpThread.start()
|
|
|
|
def __init__(self, addr: str, tcpport: str, udpport: str):
|
|
self.tcp = self.TCP(addr, tcpport)
|
|
self.udp = self.UDP(addr, udpport) |