theoretically reworked packet structure for gamestart event + fixed client issue flooding the server with packets

This commit is contained in:
2024-01-15 10:26:14 +01:00
parent afa2d779a1
commit 1a9f49f5e9
30 changed files with 205 additions and 34 deletions

View File

@ -27,6 +27,9 @@ class App:
self.__myFont = pygame.font.SysFont('Comic Sans MS', 30)
self.__window = Window(width=width, height=height, title=title)
self.__inputHandler = InputHandler()
# store selected card globaly in order to prevent packet flooding
self.selectedCard = None
# game word
self.__world = World(self.__window.getScreen())
@ -47,12 +50,12 @@ class App:
# create sprite groups
# todo: remove these and let server handle card creation instead
# blocker: server - client communication [WIP]
self.__world.spawnCard("Assets/Cards/1/", pygame.Vector2(500, 1050), self.__inputHandler, Player(1000, 0, "test"))
self.__world.spawnCard("Assets/Cards/1/", pygame.Vector2(600, 1050), self.__inputHandler, Player(1000, 0, "test"))
self.__world.spawnCard("Assets/Cards/1/", pygame.Vector2(700, 1050), self.__inputHandler, Player(1000, 0, "test"))
self.__world.spawnCard("Assets/Cards/1/", pygame.Vector2(800, 1050), self.__inputHandler, Player(1000, 0, "test"))
self.__world.spawnCard("Assets/Cards/1/", pygame.Vector2(900, 1050), self.__inputHandler, Player(1000, 0, "test"))
self.__world.spawnCard("Assets/Cards/1/", pygame.Vector2(1000, 1050), self.__inputHandler, Player(1000, 0, "test"))
# self.__world.spawnCard("Assets/Cards/1/", pygame.Vector2(500, 1050), self.__inputHandler, Player(1000, 0, "test"))
# self.__world.spawnCard("Assets/Cards/1/", pygame.Vector2(600, 1050), self.__inputHandler, Player(1000, 0, "test"))
# self.__world.spawnCard("Assets/Cards/1/", pygame.Vector2(700, 1050), self.__inputHandler, Player(1000, 0, "test"))
# self.__world.spawnCard("Assets/Cards/1/", pygame.Vector2(800, 1050), self.__inputHandler, Player(1000, 0, "test"))
# self.__world.spawnCard("Assets/Cards/1/", pygame.Vector2(900, 1050), self.__inputHandler, Player(1000, 0, "test"))
# self.__world.spawnCard("Assets/Cards/1/", pygame.Vector2(1000, 1050), self.__inputHandler, Player(1000, 0, "test"))
while self.__running:
self.__clock.tick(self.__FPS)
@ -79,7 +82,7 @@ class App:
# handles incoming event queue
def handleEvent(self, events):
# TODO: fix bug that stacks cards when dragging them around
self.selectedCard = None
# TODO: something prevents selected card from becoming function global
for event in events:
if event.type == pygame.QUIT:
@ -112,7 +115,6 @@ class App:
self.__world.spawnMonsterCard("Assets/Cards/MonsterCards/testmonstercard/", self.__inputHandler.getMousePos(), self.__inputHandler)
elif event.type == pygame.MOUSEBUTTONUP:
mouse_x, mouse_y = pygame.mouse.get_pos()
mouse_pos = pygame.Vector2(mouse_x, mouse_y)
if event.button == 1: # Wenn linke Maustaste losgelassen wird
for card in self.__world.getCards():
card.setDragging(False)
@ -120,14 +122,14 @@ class App:
# TODO: send place card event to server
# resets the currently selected card in order to prevent it getting moved
try:
print(self.selectedCard)
if self.selectedCard == card:
PlaceCard(self.__tcpClient, card) # tells the server that the player placed this card
print(self.selectedCard)
PlaceCard(self.__tcpClient, self.selectedCard, 1) # tells the server that the player placed this card
except Exception as e:
print(f"failed to place card on server due to error: {e}")
if not card == None:
card = None
if not self.selectedCard == None:
self.selectedCard = None
# sets the running state for the gameloop
def setRunning(self, running:bool):

View File

@ -7,14 +7,16 @@ from Classes.System.Components.InputHandler import InputHandler
from Classes.Game.World import World
from Classes.Game.Events.GameStart import GameStart
from Classes.Game.Player import Player
from Classes.Game.Events.Login import LoginResponse
class TCPEventHandler:
def __init__(self, socket:socket):
self.tcp_socket = socket
def handleEvents(self, message, inputHandler:InputHandler, world:World):
if message["event"] == "login":
def handleEvents(self, message:dict, inputHandler:InputHandler, world:World):
if message["event"] == "loginresponse":
# todo: handle login response here
LoginResponse(message, world)
pass
elif message["event"] == "startgame":
print("gamestart")
@ -24,14 +26,14 @@ class TCPEventHandler:
CardPlaced(world, message["card"], message["type"], message["owner"], pygame.Vector2(int(message["x"]), int(message["y"]), inputHandler))
pass
elif message["event"] == "MoveCard":
CardMoved(
world,
message["card"],
message["type"],
message["owner"],
pygame.Vector2(int(message["old_x"]), int(message["old_y"])),
pygame.Vector2(int(message["new_x"]), int(message["new_y"])),
inputHandler)
# CardMoved(
# world,
# message["card"],
# message["type"],
# message["owner"],
# pygame.Vector2(int(message["old_x"]), int(message["old_y"])),
# pygame.Vector2(int(message["new_x"]), int(message["new_y"])),
# inputHandler, world)
pass
elif message["event"] == "RemoveCard":
pass