Exemplo n.º 1
0
async def prebattle_ws_handler(request):
    session = await get_session(request)
    account_id = session['account_id']
    name = session['name']
    vehicle = session['vehicle']

    ws = web.WebSocketResponse()

    avatar = Avatar(account_id, name)
    avatar.set_vehicle(vehicle)
    BATTLE_QUEUE.append(avatar),
    avatar.connect(ws)

    await ws.prepare(request)

    roster = get_rosters(BATTLE_QUEUE)
    while roster:
        arena = Arena(teams=[roster[::2], roster[1::2]])
        ARENAS[arena.id] = arena

        for a in roster:
            a.send_message({'redirect': '/arena/{}'.format(arena.id)})
            a.disconnect()

        roster = get_rosters(BATTLE_QUEUE)

    for avatar in BATTLE_QUEUE:
        avatar.send_message(
            {'message': 'People awaiting: {}'.format(len(BATTLE_QUEUE))}
        )

    async for msg in ws:
        if msg.tp == aiohttp.MsgType.text:
            if msg.data == 'close':
                await ws.close()
        elif msg.tp == aiohttp.MsgType.error:
            print('ws connection closed with exception %s' % ws.exception())

    if avatar in BATTLE_QUEUE:
        BATTLE_QUEUE.remove(avatar)

    return ws
Exemplo n.º 2
0
async def prebattle_ws_handler(request):
    session = await get_session(request)
    account_id = session['account_id']
    name = session['name']
    vehicle = session['vehicle']

    ws = web.WebSocketResponse()

    avatar = Avatar(account_id, name)
    avatar.set_vehicle(vehicle)
    BATTLE_QUEUE.append(avatar),
    avatar.connect(ws)

    await ws.prepare(request)

    roster = get_rosters(BATTLE_QUEUE)
    while roster:
        arena = Arena(teams=[roster[::2], roster[1::2]])
        ARENAS[arena.id] = arena

        for a in roster:
            a.send_message({'redirect': '/arena/{}'.format(arena.id)})
            a.disconnect()

        roster = get_rosters(BATTLE_QUEUE)

    for avatar in BATTLE_QUEUE:
        avatar.send_message(
            {'message': 'People awaiting: {}'.format(len(BATTLE_QUEUE))})

    async for msg in ws:
        if msg.tp == aiohttp.MsgType.text:
            if msg.data == 'close':
                await ws.close()
        elif msg.tp == aiohttp.MsgType.error:
            print('ws connection closed with exception %s' % ws.exception())

    if avatar in BATTLE_QUEUE:
        BATTLE_QUEUE.remove(avatar)

    return ws