Archived
change callback to filter by player instead of client
This commit is contained in:
@@ -6,7 +6,7 @@ from controller import GameControllerInterface, ClientControllerInterface
|
||||
|
||||
from netcode.models import Message, LoginMessage
|
||||
|
||||
from model import Player
|
||||
from model import Player, Team
|
||||
|
||||
|
||||
def vibe_check(t):
|
||||
@@ -69,9 +69,9 @@ class ClientController(ClientControllerInterface):
|
||||
self,
|
||||
notification_type: str,
|
||||
data: dict,
|
||||
client_filter: Callable[["ClientController"], Any] = lambda x: True,
|
||||
player_filter: Callable[[Player], Any] = lambda x: True,
|
||||
):
|
||||
if client_filter(self):
|
||||
if hasattr(self, "player") is False or player_filter(self.player):
|
||||
await self.send(
|
||||
Message(type=notification_type, data_type="object", data=data)
|
||||
)
|
||||
|
||||
@@ -36,12 +36,11 @@ class GameController(GameControllerInterface):
|
||||
self,
|
||||
notification_type: str,
|
||||
data: dict,
|
||||
client_filter: Callable[["ClientController"], Any],
|
||||
player_filter: Callable[[Player], Any],
|
||||
):
|
||||
messages = []
|
||||
for c in self.clients:
|
||||
|
||||
if client_filter(c):
|
||||
if hasattr(c, "player") is False or player_filter(c.player):
|
||||
messages.append(
|
||||
c.send(
|
||||
Message(
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
from abc import ABC, abstractmethod
|
||||
from typing import Callable, Any, List
|
||||
from model import Game
|
||||
from model import Game, Player
|
||||
from netcode import WSServer
|
||||
from netcode.models import Message, LoginMessage
|
||||
from netcode.ws_server import WebSocketServerProtocol
|
||||
@@ -25,7 +25,7 @@ class ClientControllerInterface(ABC):
|
||||
self,
|
||||
notification_type: str,
|
||||
data: dict,
|
||||
client_filter: Callable = lambda x: True,
|
||||
player_filter: Callable[[Player], bool] = lambda x: True,
|
||||
):
|
||||
pass
|
||||
|
||||
@@ -69,7 +69,7 @@ class GameControllerInterface(ABC):
|
||||
self,
|
||||
notification_type: str,
|
||||
data: dict,
|
||||
client_filter: Callable[[ClientControllerInterface], Any],
|
||||
player_filter: Callable[[Player], Any],
|
||||
):
|
||||
pass
|
||||
|
||||
|
||||
+4
-26
@@ -3,9 +3,7 @@ from typing import List
|
||||
import random
|
||||
from model import (
|
||||
Card,
|
||||
CardType,
|
||||
CardRole,
|
||||
CardFaction,
|
||||
CardParser,
|
||||
Player,
|
||||
Team,
|
||||
@@ -87,7 +85,6 @@ class Game(Serializable):
|
||||
async def create_card(self, card: Card) -> Card:
|
||||
self.cards.append(card)
|
||||
await self.notify_controller("create", card.serialize_guest())
|
||||
|
||||
return card
|
||||
|
||||
async def create_base_deck(self, base_deck_name: str = "base") -> List[Card]:
|
||||
@@ -120,7 +117,7 @@ class Game(Serializable):
|
||||
if team is None:
|
||||
team = await self.create_team()
|
||||
|
||||
player = Player(username, team)
|
||||
player = Player(self, username, team)
|
||||
self.players.append(player)
|
||||
|
||||
player.stack_pile = await self.create_base_deck("base")
|
||||
@@ -152,8 +149,7 @@ class Game(Serializable):
|
||||
await self.notify_controller("update", self.serialize_guest())
|
||||
|
||||
def serialize_guest(self) -> dict:
|
||||
return super().serialize_guest() | {
|
||||
"loaded_cards": None,
|
||||
data = super().serialize_guest() | {
|
||||
"cards": [card.uuid for card in self.cards],
|
||||
"market_stack": [None for card in self.market_stack],
|
||||
"market": [None if card is None else card.uuid for card in self.market],
|
||||
@@ -165,6 +161,8 @@ class Game(Serializable):
|
||||
"turn": None if self.turn is None else self.turn.uuid,
|
||||
}
|
||||
|
||||
return {k: data[k] for k in data.keys() - ["loaded_cards"]}
|
||||
|
||||
async def start_game(self):
|
||||
self.started = True
|
||||
self.turn = random.choice(self.teams)
|
||||
@@ -183,26 +181,6 @@ class Game(Serializable):
|
||||
|
||||
notifications = []
|
||||
|
||||
# Send cards in hand to teams
|
||||
|
||||
# TODO : Migrate this to player (when player draw)
|
||||
for p in self.players:
|
||||
notifications.append(p.team.notify_controller("update", p.serialize_team()))
|
||||
# for t in self.teams:
|
||||
# current_team = [p for p in self.players if p.team == t]
|
||||
# for p in current_team:
|
||||
# for o in current_team:
|
||||
# notifications.append(
|
||||
# p.notify_controller("update", o.serialize_team())
|
||||
# )
|
||||
|
||||
# Send cards in hand to all others
|
||||
for p in self.players:
|
||||
for o in self.players:
|
||||
if p.team == o.team:
|
||||
continue
|
||||
notifications.append(p.notify_controller("update", o.serialize_guest()))
|
||||
|
||||
await asyncio.gather(*notifications)
|
||||
|
||||
print(
|
||||
|
||||
@@ -26,7 +26,8 @@ class Serializable:
|
||||
self,
|
||||
notification_type: str,
|
||||
game_object: dict,
|
||||
client_filter: Callable = lambda _: True,
|
||||
# TODO : Player interface to typing
|
||||
player_filter: Callable[[Any], bool] = lambda _: True,
|
||||
):
|
||||
for l in self.listeners:
|
||||
await l(notification_type, game_object, client_filter)
|
||||
await l(notification_type, game_object, player_filter)
|
||||
|
||||
@@ -8,7 +8,9 @@ class WSServer:
|
||||
"""Handles Client-Server communication"""
|
||||
|
||||
connections: Set[WebSocketServerProtocol]
|
||||
on_new_connection_callback: Callable[[WebSocketServerProtocol], None]
|
||||
on_new_connection_callback: Callable[
|
||||
[WebSocketServerProtocol, Callable[[Any], Awaitable[None]]], Awaitable[None]
|
||||
]
|
||||
|
||||
port: int
|
||||
|
||||
|
||||
Reference in New Issue
Block a user