Skip to content
This repository has been archived by the owner on Aug 20, 2018. It is now read-only.

Commit

Permalink
[+] Update game session and return client connection state
Browse files Browse the repository at this point in the history
  • Loading branch information
Serge Travin committed Jul 30, 2011
1 parent e8b102c commit cc740c8
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 0 deletions.
21 changes: 21 additions & 0 deletions setwithme/apps/game/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@


PRESSED_SET_TIMEOUT = datetime.timedelta(seconds=5)
CLIENT_IDLE_TIMEOUT = datetime.timedelta(seconds=30)
CLIENT_LOST_TIMEOUT = datetime.timedelta(seconds=60)


class Game(models.Model):
Expand Down Expand Up @@ -64,6 +66,12 @@ class State:
IDLE = 0
SET_PRESSED = 1
BLOCKED = 2


class ClientState:
ACTIVE = 0
IDLE = 1
LOST = 2


class GameSession(models.Model):
Expand All @@ -74,6 +82,7 @@ class GameSession(models.Model):
set_pressed_dt = models.DateTimeField(null=True)
sets_found = models.IntegerField(default=0)
failures = models.IntegerField(default=0)
last_access = models.DateTimeField(default=datetime.datetime.now)

def press_set(self):
self.set_pressed_dt = datetime.datetime.now()
Expand All @@ -87,8 +96,20 @@ def set_in_time(self):
def serialize(self, current_user_id):
return {'game': self.game_id,
'state': self.state,
'client_state': self._get_client_state(),
'user_id': self.user,
'me': self.user == current_user_id,
'sets_found': self.sets_found,
'failures': self.failures}

def update(self):
self.last_access = datetime.datetime.now()
self.save()

def _get_client_state(self):
now = datetime.datetime.now()
if self.last_access + CLIENT_LOST_TIMEOUT < now:
return ClientState.LOST
if self.last_access + CLIENT_IDLE_TIMEOUT < now:
return ClientState.IDLE
return ClientState.ACTIVE
1 change: 1 addition & 0 deletions setwithme/apps/game/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ def start_game(request):
def status(request, game_id):
game = Game.objects.get(uid=game_id)
self_id = request.session.session_key
GameSession.objects.get(game_id=game_id, user=self_id).update()
users = [gs.serialize(self_id) for gs in \
game.gamesession_set.all()]
return {'users': users,
Expand Down

0 comments on commit cc740c8

Please sign in to comment.