Exemple #1
0
 async def turn(self, turn: WebsocketTurn) -> None:
     """Process turn info"""
     self.session.refresh(self.game)
     # Check if it is user's turn to act
     if self.game.turn != self.user.id:
         # Turn is not on this user
         await WebsocketManager.send(self.user.id, WebsocketResponse(type=WebsocketResponseEnum.INVALID, status=status.HTTP_400_BAD_REQUEST).dict())
         return
     # Fetch boards of users
     other_user_id = ControllerGame.get_other_user_id(self.game, self.user.id)
     self_board = GameManager.get_board(self.user.id)
     other_board = GameManager.get_board(other_user_id)
     if self_board is None or other_board is None:
         raise KeyError
     # Record hit
     response = WebsocketTurnResponse(
         type=WebsocketResponseEnum.TURN,
         status=status.HTTP_200_OK,
         hit=other_board.hit(turn.x, turn.y),
         x=turn.x,
         y=turn.y
     )
     await WebsocketManager.send(self.user.id, response.dict())
     await WebsocketManager.send(other_user_id, response.dict())
     # Change turn
     await self.send_turn(other_user_id)
     self.session.commit()
Exemple #2
0
 async def message(self, message: WebsocketMessage) -> None:
     """Process incoming messages from users"""
     self.session.refresh(self.game)
     other_user_id = ControllerGame.get_other_user_id(self.game, self.user.id)
     if other_user_id is not None:
         await WebsocketManager.send(other_user_id, message.dict())
     await WebsocketManager.send(self.user.id, WebsocketResponse(type=WebsocketResponseEnum.MESSAGE, status=status.HTTP_200_OK).dict())