From 3fa66bc2bf827efcfaf28e5804fff41f36932ee0 Mon Sep 17 00:00:00 2001 From: steev Date: Sun, 7 Jan 2024 19:29:01 +0100 Subject: [PATCH] removed messy code dupes --- Game Server/.env | 3 +- .../Classes/System/Network/NetworkManger.py | 81 ++++++++++-------- .../__pycache__/EventHandler.cpython-311.pyc | Bin 0 -> 1953 bytes .../__pycache__/NetworkManger.cpython-311.pyc | Bin 0 -> 9508 bytes .../System/__pycache__/Server.cpython-311.pyc | Bin 0 -> 1412 bytes Game Server/index.py | 11 +-- 6 files changed, 52 insertions(+), 43 deletions(-) create mode 100644 Game Server/Classes/System/Network/__pycache__/EventHandler.cpython-311.pyc create mode 100644 Game Server/Classes/System/Network/__pycache__/NetworkManger.cpython-311.pyc create mode 100644 Game Server/Classes/System/__pycache__/Server.cpython-311.pyc diff --git a/Game Server/.env b/Game Server/.env index ffe3ac9..56fba80 100644 --- a/Game Server/.env +++ b/Game Server/.env @@ -1,3 +1,4 @@ HOST="127.0.0.1" -PORT=54321 +TCPPORT=54322 +UDPPORT=54323 ENV="DEV" \ No newline at end of file diff --git a/Game Server/Classes/System/Network/NetworkManger.py b/Game Server/Classes/System/Network/NetworkManger.py index c002254..7c4bedc 100644 --- a/Game Server/Classes/System/Network/NetworkManger.py +++ b/Game Server/Classes/System/Network/NetworkManger.py @@ -12,7 +12,7 @@ class NetworkManager: __BufferSize:int = 1024 __udpSocket:socket __users:list - __eventHandler: list + __eventHandler: UDPEventHandler __UDPClientThread:threading.Thread def __init__(self, Addr:str, Port:str): @@ -23,20 +23,10 @@ class NetworkManager: self.__eventHandler = {} self.__udpSocket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) self.__udpSocket.bind((self.__Addr, self.__Port)) - - self.__UDPClientThread = threading.Thread(target=self.accept_connections) - self.__UDPClientThread.start() - def accept_connections(self): - while True: - client_udp_socket, client_address = self.__udpSocket.accept() - print(f"Connected with {client_address}") - - self.__users[client_address] = client_udp_socket - self.__eventHandler[client_address] = TCPEventHandler(client_udp_socket) - - client_handler_thread = threading.Thread(target=self.receive, args=(client_udp_socket, client_address)) - client_handler_thread.start() + # Starten eines Threads für das Empfangen von UDP-Daten + self.__UDPClientThread = threading.Thread(target=self.receive) + self.__UDPClientThread.start() # handles incomming udp data def receive(self): @@ -67,7 +57,7 @@ class NetworkManager: __BufferSize:int = 1024 __tcpSocket:socket __users:list - __eventHandler: list + __eventHandler: TCPEventHandler __TCPClientThread:threading.Thread def __init__(self, Addr:str, Port:str): @@ -78,41 +68,62 @@ class NetworkManager: self.__eventHandler = {} self.__tcpSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.__tcpSocket.bind((self.__Addr, self.__Port)) + self.__tcpSocket.listen(2) self.__TCPClientThread = threading.Thread(target=self.accept_connections) self.__TCPClientThread.start() def accept_connections(self): while True: - client_tcp_socket, client_address = self.__tcpSocket.accept() - print(f"Connected with {client_address}") - self.__users[client_address] = client_tcp_socket - self.__eventHandler[client_address] = TCPEventHandler(client_tcp_socket) - client_handler_thread = threading.Thread(target=self.receive, args=(client_tcp_socket, client_address)) - client_handler_thread.start() + try: + client_tcp_socket, client_address = self.__tcpSocket.accept() + print(f"Connected with {client_address}") + self.__users[client_address] = client_tcp_socket + self.__eventHandler[client_address] = TCPEventHandler(client_tcp_socket) + client_handler_thread = threading.Thread( + target=self.receive, + args=(client_tcp_socket, client_address) + ) + client_handler_thread.start() + except Exception as e: + print(f"tcp socket failed to accept connection due to error: {e}") + pass - # handles incomming udp data - def receive(self): + def receive(self, client_socket, client_address): while True: - data, address = self.__tcpSocket.recvfrom(self.__BufferSize) - message = data.decode() - messageJson = json.loads(message) - user = messageJson.get("user") + try: + data = client_socket.recv(self.__BufferSize) + if not data: + print(f"Connection with {client_address} closed.") + break # Verbindung geschlossen, Schleife beenden - if user not in self.__users: - self.__users[user] = address # Storing new user in dictionary + message = data.decode() + messageJson = json.loads(message) + user = messageJson.get("user") - # Process the message and handle accordingly - self.__eventHandler.handleTCPEvents(messageJson) - print(f"Received message from {address}: {message}") + if user not in self.__users: + self.__users[user] = client_address + + self.__eventHandler[client_address].handleTCPEvents(messageJson) + print(f"Received message from {client_address}: {message}") + + except socket.error as e: + if e.errno == 10054: + print(f"Connection with {client_address} forcibly closed by remote host.") + break + print(f"Socket error receiving data from {client_address}: {e}") + except json.JSONDecodeError as e: + print(f"JSON decoding error receiving data from {client_address}: {e}") + except Exception as e: + print(f"Error receiving data from {client_address}: {e}") def broadcast(self, payload:dict): - for user_address in self.__users.values(): - self.__tcpSocket.sendto(json.dumps(payload).encode(), user_address) + for user_socket in self.__users.values(): + user_socket.send(json.dumps(payload).encode()) def send(self, payload:dict, user:str): if user in self.__users: - self.__tcpSocket.sendto(json.dumps(payload).encode(), self.__users[user]) + self.__users[user].send(json.dumps(payload).encode()) tcp: TCP udp: UDP diff --git a/Game Server/Classes/System/Network/__pycache__/EventHandler.cpython-311.pyc b/Game Server/Classes/System/Network/__pycache__/EventHandler.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..783943adb455fbe72e81b035eb9e3335e2990609 GIT binary patch literal 1953 zcmb_c%}*0S6rcSnTju8L4Nc1yXO5vJ8iiRfg3F#R=Q#yg#mkMNI2NmCjVG*(KZGp$JSnQu6;Q0~rG zFR-ab=Ni0r2qz_tk&?bhxWP@P-2#^B+^Fcxcx{#}2D_Is%);Hm!KZVN?=`s}-1mG| z=OR2uQw*g+d8ODW*LV1Axs#PkU&5-^AZ%b38IN>*8)DBJfIstyvCoX^0Ks*8i_i7w6N3nqnwj zW!*wm**J27f2~q=o=~S}F)>+8N?f0Dx-gIHlPQA-l{AcN90WYElkI*24R#09&VUpT zrq|F25js{>N@w)YnLTt?4_&5*uCIsAKCDAu^VxzJ0nfwiKPfc6>~+MalGd-qvu;7UZC>~K3bv^C#$Mz(LfdA_^ea`F)wNU<9& z=W0ZNDwofu4)g2;&HN35f{= z)!vs-O0_rEm_WdS{O9)0oU*`^;}EwuZl5<|Z?M&sy_6%r>|61Dbz5A9DR_^{B>)Ig k)7r$@R8N$#HMl~K!w=+s{!xsLY2eUt_<`Kd6BNqR-!aR#bN~PV literal 0 HcmV?d00001 diff --git a/Game Server/Classes/System/Network/__pycache__/NetworkManger.cpython-311.pyc b/Game Server/Classes/System/Network/__pycache__/NetworkManger.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ef6db75d6c3b4ed9dffff32ad2f76a20dc7f681c GIT binary patch literal 9508 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 CnH9PK literal 0 HcmV?d00001 diff --git a/Game Server/Classes/System/__pycache__/Server.cpython-311.pyc b/Game Server/Classes/System/__pycache__/Server.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..14462d21cd4988b6097cfbe266edeeb904c37b9d GIT binary patch literal 1412 zcmZ`(&r2IY6rRaWHmfm-#zU=Ah^3cY0=*V#50QFGDouqF7KbG}w$WsxGowWbl7a^h zy_WRYlU3{=;Gus&4?V;pG%OT^o(esrq$f{(v%A^GADx|f?|X0F%)a-{Fdq_$Q3NgZ z>n+=lAoN2SgGK_-p9j!JHnMRIm3@uN*s~+$2o8(WThVP}kCb(LWDk{N_9$c#cl8qETa3Ho)CZJWw#}IkLmpXKUuLxa(O4x){kxQQqrzcnLZ;n32+3dw7t_iEj> zb^xB^(2L<!k_yAPs;y0gi}C@y(d}YD}FP(`UwXXVCkw2vtIwz=*=|NL>Wb zMsjGbiB>}k@DQD=A)N<+jzbGb4-ZU{$&;{YHp*4NRZee(SLgC=$YMSY;X?g7!za{A zRqswZAYtezrc~Tr5H0jQlRK0jcTeP}-OuvN?rCQEEVH~%&Wt-9uk%R=D`pMFssrp( z>W)%cZ`hkPg~uq}*tBZFj3y*^Q*fspry(s_Z8(Bbzlbz!Map_`?jmP#h8 zyJS@~99I{O${LgIhRj$UlE$i>o8@oM|K~rmUP^xfBvDf^ literal 0 HcmV?d00001 diff --git a/Game Server/index.py b/Game Server/index.py index db425cc..18c5a2a 100644 --- a/Game Server/index.py +++ b/Game Server/index.py @@ -1,15 +1,12 @@ import os -import dotenv from Classes.System.Server import Server -def main(self): - dotenv.load_dotenv() - +def main(): # retrieves host data from environment - HOST = os.getenv("HOST") - TCPPORT = os.getenv("TCPPORT") - UDPPORT = os.getenv("UDPPORT") + HOST = "127.0.0.1" + TCPPORT = "54322" + UDPPORT = "54323" Server(HOST, TCPPORT, UDPPORT)