ugly ws controller

This commit is contained in:
2024-03-26 17:20:41 +01:00
parent 3576882dc9
commit 01fd2d63f5
6 changed files with 52 additions and 14 deletions
+1
View File
@@ -0,0 +1 @@
from controller.client import Client
+15
View File
@@ -0,0 +1,15 @@
from websockets.server import WebSocketServerProtocol
class Client:
websocket: WebSocketServerProtocol
def __init__(self, websocket: WebSocketServerProtocol):
self.websocket = websocket
async def listen(self):
async for message in self.websocket:
await self.on_message(message)
async def on_message(self, message):
print(message)
+2 -2
View File
@@ -35,8 +35,8 @@ class Card:
pass pass
class CardGuard(Card): class CardChampion(Card):
"""Represents any guard card""" """Represents any champion card"""
defense: int defense: int
guard: bool guard: bool
+5
View File
@@ -9,7 +9,12 @@ class Player:
discard_pile: List[Card] discard_pile: List[Card]
team: Team team: Team
hand: List[Card]
board: List[Card]
def __init__(self, team: Team): def __init__(self, team: Team):
self.stack_pile = [] self.stack_pile = []
self.discard_pile = [] self.discard_pile = []
self.hand = []
self.board = []
self.team = team self.team = team
+18 -1
View File
@@ -2,11 +2,28 @@
import asyncio import asyncio
from game import Game from game import Game
from netcode.ws_server import WebSocketServerProtocol
from netcode import WSServer from netcode import WSServer
from controller import Client
gameServer = WSServer() gameServer = WSServer()
hero_game = Game() hero_game = Game()
hero_game.broadcast = gameServer.broadcast hero_game.broadcast = gameServer.broadcast
asyncio.run(gameServer.serve()) playerServer = WSServer()
async def handler(websocket: WebSocketServerProtocol):
client = Client(websocket)
await client.listen()
playerServer.message_callbacks.append(handler)
async def main():
await asyncio.gather(gameServer.serve(), playerServer.serve(port=8766))
asyncio.run(main())
+11 -11
View File
@@ -1,5 +1,5 @@
import asyncio import asyncio
from typing import Set from typing import Set, Callable, Any, List
from websockets.server import serve, WebSocketServerProtocol from websockets.server import serve, WebSocketServerProtocol
from websockets import broadcast from websockets import broadcast
@@ -9,23 +9,23 @@ class WSServer:
connections: Set[WebSocketServerProtocol] connections: Set[WebSocketServerProtocol]
message_callbacks: List[Callable[[WebSocketServerProtocol], Any]]
def __init__(self): def __init__(self):
self.connections = set() self.connections = set()
self.message_callbacks = []
async def _handler(self, websocket: WebSocketServerProtocol): async def handler(self, websocket: WebSocketServerProtocol):
"""Is called everytime a client connects to the websocket""" """Is called everytime a client connects to the websocket"""
await asyncio.gather(
await asyncio.wait( self.track_connection(websocket), self.run_callbacks(websocket)
[self._track_connection(websocket), self._message_handler(websocket)]
) )
async def _message_handler(self, websocket: WebSocketServerProtocol): async def run_callbacks(self, websocket: WebSocketServerProtocol):
"""Handles recieving messages from the client""" """Handles recieving messages from the client"""
await asyncio.gather(*[cb(websocket) for cb in self.message_callbacks])
async for message in websocket: async def track_connection(self, websocket: WebSocketServerProtocol):
await websocket.send(message)
async def _track_connection(self, websocket: WebSocketServerProtocol):
"""Keeps track of connected clients in the connections property""" """Keeps track of connected clients in the connections property"""
try: try:
@@ -36,7 +36,7 @@ class WSServer:
async def serve(self, address="0.0.0.0", port=8765): async def serve(self, address="0.0.0.0", port=8765):
"""Call to start the websocket""" """Call to start the websocket"""
async with serve(self._handler, address, port): async with serve(self.handler, address, port):
print("Started server on ws://" + address + ":" + str(port)) print("Started server on ws://" + address + ":" + str(port))
await asyncio.Future() # run forever await asyncio.Future() # run forever