import json import socket import threading import pygame from Classes.Game.World import World from Classes.System.Components.InputHandler import InputHandler from Classes.Game.Events.GameStart import GameStart from Classes.Game.Events.Login import LoginResponse from Classes.Game.Events.PlaceCard import CardPlaced from Classes.Game.Player import Player class TCPClient: def __init__(self, addr: str, port: str, world:World, inputHandler:InputHandler): self.addr = addr self.port = int(port) self.tcpSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.world = world self.inputHandler = inputHandler 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.handleEvents(decoded_data) except Exception as e: print(f"Error receiving TCP data: {e}") break def handleEvents(self, message): print(message) if message["event"] == "loginresponse": if message["status"] != "success": print("login failed") else: print("receiving login confirmation from server") self.world.setPlayer(Player(0,0,message["name"], message["id"])) elif message["event"] == "startgame": print(self.world.player) # world.player.setMana(message["player"]["mana"]) # world.player.setHp(message["player"]["hp"]) self.world.setEnemy(Player(message["enemy"]["hp"],0,message["enemy"]["name"], message["enemy"]["id"])) GameStart(self.world, message["player"]["hand"], self.inputHandler, self.world.getPlayer()) pass elif message["event"] == "PlacedCard": CardPlaced(self.world, message["card"], message["owner"], pygame.Vector2(message["x"], message["y"]), self.inputHandler) pass def listen(self): tcpThread = threading.Thread(target=self.receive) tcpThread.daemon = True tcpThread.start()