Exemplo n.º 1
0
def ws_connect(message):
    # Work out room name from path (ignore slashes)

    room = message.content['path'].strip("/")

    g = Group("game-%s" % room)
    g.history = []
    Group("game-%s" % room).add(message.reply_channel)

    message.channel_session['room'] = room

    game_info = cache.get("game-%s" % message.channel_session['room'], {})

    game = models.Game.objects.get(pk=room.split('-')[-1])
    if game.finished or game.aborted:
        return

    if not 'game-id' in game_info:
        game_info['game-id'] = game.id
        game_info['game-field'] = TicTacFieldSerializer.serialize(
            TicTacField.from_game(game))

    open_games = cache.get('open_games', set())

    game_info.setdefault('players-queue', [])
    game_info.setdefault('players', {})
    if len(game_info['players-queue']) < 2:
        number = 0
        if game_info['players-queue'] and game_info['players'][
                game_info['players-queue'][0]]['name'] == 'Player-2':
            number = 1
        game_info['players-queue'].append(message.reply_channel.name)
        number = number or len(game_info['players-queue'])
        game_info['players'][message.reply_channel.name] = {
            'name': 'Player-%s' % number,
            'symbol': CELL_VALUES[number - 1]
        }
        Group("game-%s" % message.channel_session['room']). \
            send(populate_message('game-action',
                                  'Player-%s join the game' % number,
                                  type='join')
                 )
        open_games.add(game_info['game-id'])
        if len(game_info['players-queue']) == 2:
            try:
                open_games.remove(game_info['game-id'])
            except KeyError:
                pass
    else:
        message.reply_channel. \
            send(populate_message('warning',
                                  'You connected as a spectator',
                                  type='spectator-connected',
                                  history=list(
                                      game.move_set.values(
                                          'id',
                                          'x',
                                          'y',
                                      )),
                                  )
                 )

    cache.set('open_games', open_games)

    cache.set("game-%s" % message.channel_session['room'], game_info, 3600)