def new_game(request): """ Creates a new game. player_id should already be stored inside cookie. """ private = (request.POST['isPrivate'] == 'on' if 'isPrivate' in request.POST else False) game_type = request.POST['gameType'] player_id = sessions.get_player_id(request.session) player = Player.get_by_id(Player.get_model_id(player_id)) game = Game(game_type=game_type, creator=player, private=private, current_turn=player) game.save() game_id = Game.get_game_id(game.id) game.game_id = game_id game.save() text = 'Game created' entry = GameLogEntry(game=game, text=text) entry.save() # Send a ws message to the lobby group Group('lobby').send({'text': json.dumps(Game.get_all_games_list())}) return HttpResponseRedirect(reverse('games:game', args=(game.id,)))
def connect(self, message, **kwargs): player_id = sessions.get_player_id(message.http_session) message.channel_session['player_id'] = player_id print('Player %s connected to lobby' % player_id) player = Player.get_by_id(Player.get_model_id(player_id)) data = Game.get_all_games_list() Group('lobby').send({'text': json.dumps(data)})
def game(request, game_id): """ Tries to send the user to a game. Cookie might not have player_id yet. """ bots = ['facebookexternal', 'whatsapp'] for bot in bots: if bot in request.META['HTTP_USER_AGENT'].lower(): return HttpResponse('Hello bot') game = get_object_or_404(Game, pk=int(game_id)) player_id = sessions.get_or_create_player_id(request.session) player = Player.get_by_id(Player.get_model_id(player_id)) if game.game_type == 'ttt': template = 'games/ttt.html' elif game.game_type == 'reversi': template = 'games/reversi.html' else: template = 'games/chess.html' if game.creator == player or game.opponent == player: print('Game creator or opponent is (re)joining game.') return render(request, template, {'player_id': player_id, 'game_id': game_id}) elif game.opponent is None: print('New player is joining game') game.opponent = player game.save() # Send a ws message to the lobby group Group('lobby').send({'text': json.dumps(Game.get_all_games_list())}) return render(request, template, {'player_id': player_id, 'game_id': game_id}) else: return HttpResponse('Sorry, player %s, but game %s is full' % (player_id, game_id))