1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- import asyncio
- from channels.generic.websocket import AsyncWebsocketConsumer
- from .backend.game import Game
- from channels.db import database_sync_to_async
-
-
- class TimerConsumer(AsyncWebsocketConsumer):
- async def connect(self):
- await self.accept()
- self.gameid = self.scope["url_route"]["kwargs"]["gameid"]
- self.game = await self.getGame()
- timer = await self.getRemainingTimer()
- await self.send(text_data=str(timer))
- self.timerTask = asyncio.ensure_future(self.timer(timer))
-
- async def timer(self, timer):
- await asyncio.sleep(1)
- try:
- while timer >= 0:
- if self.game.running:
- await self.send(text_data=str(timer))
- timer -= 1
- await asyncio.sleep(1)
- else:
- await self.send(text_data="game not started")
- self.game = await self.getGame()
- await asyncio.sleep(1)
- except asyncio.CancelledError:
- pass
- finally:
- self.game = await self.getGame()
- if self.game.currentRound > self.game.maxRounds:
- await self.send(text_data="endGame")
- else:
- await self.send(text_data="nextRound")
-
- @database_sync_to_async
- def getRemainingTimer(self):
- return self.game.timer.remainingtimer
-
- @database_sync_to_async
- def getGame(self):
- return Game.objects.get(id=self.gameid)
-
- @database_sync_to_async
- def processGameround(self, game):
- gameend = game.processGameround()
-
- async def receive(self, event):
- pass
-
- async def disconnect(self, event):
- self.timerTask.cancel()
|