Ejemplo n.º 1
0
def wshandler(request):
    resp = WebSocketResponse()
    ok, protocol = resp.can_start(request)
    if not ok:
        with open(WS_FILE, 'rb') as fp:
            return Response(body=fp.read(), content_type='text/html')
    yield from resp.prepare(request)
    request.app['sockets'].append(resp)

    while True:
        msg = yield from resp.receive()
        print('msg: {}'.format(msg.data))
        if msg.tp == MsgType.text:
            for ws in request.app['sockets']:
                ws.send_str('---------------')
                if msg.data == 'on':
                    ws.send_str(turnOn())
                elif msg.data == 'off':
                    ws.send_str(turnOff())
                elif msg.data == 'true':
                    f = open("cb_state.txt",'w')
                    f.write('1')
                    f.close()
                elif msg.data == 'false':
                    f = open("cb_state.txt",'w')
                    f.write('0')
                    f.close()
                else:
                    f = open("cb_state.txt")
                    ws.send_str(f.read())
                    f.close()
        else:
            break
    request.app['sockets'].remove(resp)
    return resp
Ejemplo n.º 2
0
def wshandler(request):
    resp = WebSocketResponse()
    ok, protocol = resp.can_start(request)
    if not ok:
        with open(WS_FILE, 'rb') as fp:
            return Response(body=fp.read(), content_type='text/html')

    resp.start(request)
    print('Someone joined.')
    for ws in request.app['sockets']:
        ws.send_str('Someone joined')
    request.app['sockets'].append(resp)

    try:
        while True:
            msg = yield from resp.receive_str()
            print(msg)
            for ws in request.app['sockets']:
                if ws is not resp:
                    ws.send_str(msg)
    except WSClientDisconnectedError:
        if resp not in request.app['sockets']:
            return resp
        request.app['sockets'].remove(resp)
        print('Someone disconnected.')
        for ws in request.app['sockets']:
            ws.send_str('Someone disconnected.')
        raise
Ejemplo n.º 3
0
def wshandler(request):
    print("wshandler",  request)
    resp = WebSocketResponse()
    ok, protocol = resp.can_start(request)
    if not ok:
        print("http")
        with open(WS_FILE, 'rb') as fp:
            return Response(body=fp.read(), content_type='text/html')

    print("ws")
    resp.start(request)
    print('Someone joined.')
    for ws in request.app['sockets']:
        ws.send_str('Someone joined')
    request.app['sockets'].append(resp)

    while True:
        msg = yield from resp.receive()

        if msg.tp == MsgType.text:
            for ws in request.app['sockets']:
                if ws is not resp:
                    ws.send_str(msg.data)
        else:
            break

    request.app['sockets'].remove(resp)
    print('Someone disconnected.')
    for ws in request.app['sockets']:
        ws.send_str('Someone disconnected.')
    return resp
Ejemplo n.º 4
0
def wshandler(request):
    resp = WebSocketResponse()
    ok, protocol = resp.can_start(request)
    if not ok:
        with open(WS_FILE, "rb") as fp:
            return Response(body=fp.read(), content_type="text/html")

    yield from resp.prepare(request)
    print("Someone joined.")
    for ws in request.app["sockets"]:
        ws.send_str("Someone joined")
    request.app["sockets"].append(resp)

    while True:
        msg = yield from resp.receive()

        if msg.tp == MsgType.text:
            for ws in request.app["sockets"]:
                if ws is not resp:
                    ws.send_str(msg.data)
        else:
            break

    request.app["sockets"].remove(resp)
    print("Someone disconnected.")
    for ws in request.app["sockets"]:
        ws.send_str("Someone disconnected.")
    return resp
Ejemplo n.º 5
0
async def wshandler(request):
    resp = WebSocketResponse()
    ok, protocol = resp.can_start(request)
    if not ok:
        with open(WS_FILE, 'rb') as fp:
            return Response(body=fp.read(), content_type='text/html')

    await resp.prepare(request)

    try:
        print('Someone joined.')
        for ws in request.app['sockets']:
            ws.send_str('Someone joined')
        request.app['sockets'].append(resp)

        async for msg in resp:
            if msg.tp == MsgType.text:
                for ws in request.app['sockets']:
                    if ws is not resp:
                        ws.send_str(msg.data)
            else:
                return resp
        return resp

    finally:
        request.app['sockets'].remove(resp)
        print('Someone disconnected.')
        for ws in request.app['sockets']:
            ws.send_str('Someone disconnected.')
Ejemplo n.º 6
0
def wshandler(request):
    resp = WebSocketResponse()
    ok, protocol = resp.can_start(request)
    if not ok:
        with open(WS_FILE, 'rb') as fp:
            return Response(body=fp.read(), content_type='text/html')

    resp.start(request)
    print('Someone joined.')
    for ws in request.app['sockets']:
        ws.send_str('Someone joined')
    request.app['sockets'].append(resp)

    try:
        while True:
            msg = yield from resp.receive_str()
            print(msg)
            for ws in request.app['sockets']:
                if ws is not resp:
                    ws.send_str(msg)
    except WSClientDisconnectedError:
        if resp not in request.app['sockets']:
            return resp
        request.app['sockets'].remove(resp)
        print('Someone disconnected.')
        for ws in request.app['sockets']:
            ws.send_str('Someone disconnected.')
        raise
Ejemplo n.º 7
0
def wshandler(request):
    resp = WebSocketResponse()
    ok, protocol = resp.can_start(request)
    if not ok:
        with open(WS_FILE, 'rb') as fp:
            return Response(body=fp.read(), content_type='text/html')

    yield from resp.prepare(request)
    print('Someone joined.')
    for ws in request.app['sockets']:
        ws.send_str('Someone joined')
    request.app['sockets'].append(resp)

    while True:
        msg = yield from resp.receive()

        if msg.tp == MsgType.text:
            for ws in request.app['sockets']:
                if ws is not resp:
                    ws.send_str(msg.data)
        else:
            break

    request.app['sockets'].remove(resp)
    print('Someone disconnected.')
    for ws in request.app['sockets']:
        ws.send_str('Someone disconnected.')
    return resp
Ejemplo n.º 8
0
def wsHandler(request):
    resp = WebSocketResponse()
    ok, protocol = resp.can_start(request)
    if not ok:
        with open(WS_FILE, 'rb') as fp:
            return Response(body=fp.read(), content_type='text/html')

    yield from resp.prepare(request)
    
    print('Someone joined.')
    for ws in request.app['sockets']:
        ws.send_str('Someone joined')
    request.app['sockets'].append(resp)

    while True:
        msg = yield from resp.receive()

        if msg.tp == MsgType.text:
            obj = json.loads(msg.data)
            retVal = parseRequest(obj)

            for ws in request.app['sockets']:
                if ws is resp:
                    ws.send_str(json.dumps(retVal))
        else:
            break

    request.app['sockets'].remove(resp)
    print('Someone disconnected.')
    for ws in request.app['sockets']:
        ws.send_str('Someone disconnected.')
    return resp
 def create_wsgi_environ(self, message, payload):
     environ = super().create_wsgi_environ(message, payload)
     environ['wsgi.websocket'] = None
     self.method = message.method
     self.headers = message.headers
     self._writer = self.writer
     self._reader = self.reader
     self.version = message.version
     self.path = environ.get('PATH_INFO', '')
     ws = WebSocketResponse()
     ok, protocol = ws.can_start(self)
     if ok:
         ws.start(self)
         environ['wsgi.websocket'] = ws
     return environ
Ejemplo n.º 10
0
def wshandler(request):

    resp = WebSocketResponse()
    ok, protocol = resp.can_start(request)
    if not ok:
        with open(WS_FILE, 'rb') as fp:
            return Response(body=fp.read(), content_type='text/html')

    sockets = request.app['sockets']
    if len(sockets) == 0: restart_game()
    sockets.append(resp)
    resp.start(request)

    # login
    msg = yield from resp.receive()
    keycode = msg.data
    existing = USERMAP.get(keycode)
    if not existing or not existing.closed:
        random.seed(random.SystemRandom())
        keycode = ''.join(random.sample(string.ascii_letters, 32))
    USERMAP[keycode] = resp

    # communicate
    update_id_info(sockets)
    resp.send_str(json.dumps(ACTIONS))

    while True:
        msg = yield from resp.receive()

        if msg.tp == MsgType.text:

            move = json.loads(msg.data)+[len(ACTIONS)]
            ACTIONS.append(move)
            for ws in sockets:
                ws.send_str(json.dumps([move]))

        else:
            break

    sockets.remove(resp)
    update_id_info(sockets)
    return resp
Ejemplo n.º 11
0
async def ws_handler(request):
    resp = WebSocketResponse()
    ok, protocol = resp.can_start(request)
    logger.debug('ok %s, protocol %s', ok, protocol)
    if not ok:
        raise Exception('Could not start!')

    await resp.prepare(request)
    logger.debug('Someone joined.')
    app = request.app
    app['sockets'].append(resp)

    async for msg in resp:
        if msg.tp == MsgType.text:
            try:
                m = json.loads(msg.data)
                logger.debug('Got msg %s', m)
                if m['type'] in MSG_TYPES:
                    if hasattr(request, 'session'):
                        await get_tweets(resp, app, request.session, m, request.conn)
                    else:
                        logger.info('Unknown client, closing')
                        break
            except Exception as e:
                logger.exception('Got error %s', e)
                resp.send_str(json.dumps({'type': 'error', 'desc': 'Server error'}))
                break

        elif msg.tp == MsgType.error:
            logger.exception('ws connection closed with exception %s', resp.exception())

    await resp.close()
    app['sockets'].remove(resp)
    logger.debug('Connection is closed %s', resp)
    logger.debug('Return Response')
    return resp
Ejemplo n.º 12
0
 def test_can_start_ok(self):
     req = self.make_request("GET", "/", protocols=True)
     ws = WebSocketResponse(protocols=("chat",))
     with self.assertWarns(DeprecationWarning):
         self.assertEqual((True, "chat"), ws.can_start(req))
Ejemplo n.º 13
0
 def test_can_start_started(self):
     req = self.make_request('GET', '/')
     ws = WebSocketResponse()
     ws.start(req)
     with self.assertRaisesRegex(RuntimeError, 'Already started'):
         ws.can_start(req)
Ejemplo n.º 14
0
 def test_can_start_without_upgrade(self):
     req = self.make_request('GET', '/',
                             headers=CIMultiDict({}))
     ws = WebSocketResponse()
     self.assertEqual((False, None), ws.can_start(req))
Ejemplo n.º 15
0
 def test_can_start_invalid_method(self):
     req = self.make_request('POST', '/')
     ws = WebSocketResponse()
     self.assertEqual((False, None), ws.can_start(req))
Ejemplo n.º 16
0
 def test_can_start_unknown_protocol(self):
     req = self.make_request('GET', '/')
     ws = WebSocketResponse()
     self.assertEqual((True, None), ws.can_start(req))
Ejemplo n.º 17
0
 def test_can_start_ok(self):
     req = self.make_request('GET', '/')
     ws = WebSocketResponse(protocols=('chat',))
     self.assertEqual((True, 'chat'), ws.can_start(req))
Ejemplo n.º 18
0
def test_can_start_ok(make_request):
    req = make_request('GET', '/', protocols=True)
    ws = WebSocketResponse(protocols=('chat',))
    with pytest.warns(DeprecationWarning):
        assert (True, 'chat') == ws.can_start(req)
Ejemplo n.º 19
0
def test_can_start_ok(make_request):
    req = make_request('GET', '/', protocols=True)
    ws = WebSocketResponse(protocols=('chat',))
    with pytest.warns(DeprecationWarning):
        assert (True, 'chat') == ws.can_start(req)
Ejemplo n.º 20
0
Archivo: app.py Proyecto: iho/mixera
async def wshandler(request):
    pool = request.app['db_pool']
    resp = WebSocketResponse()
    ok, protocol = resp.can_start(request)
    if not ok:
        with open(WS_FILE, 'rb') as fp:
            return Response(body=fp.read(), content_type='text/html')

    await resp.prepare(request)
    print('Someone joined.')
    for ws in request.app['sockets']:
        ws.send_str('Someone joined')
    request.app['sockets'].append(resp)

    while True:
        msg = await resp.receive()
        try:
            data = json.loads(msg.data)
        except:
            data = ''

        def broadcast(message):
            message = json.dumps(message)
            for ws in request.app['sockets']:
                if ws is not resp:
                    ws.send_str(msg.data)

        def reply(message):
            message = json.dumps(message)
            resp.send_str(message)

        if msg.tp == MsgType.text:
            if isinstance(data, dict) and data.get('type'):
                if data['type'] == 'message':
                    print(resp.user)
                     
                    await db.create_message(pool, data, resp.user['id'] )

                    response = {'type': 'message', 'status': None}
                    
                    user_to_id = data.get('to')
                    if user_to_id:
                        for ws in request.app['sockets']:
                            user = getattr(ws, 'user')
                            if user['id'] == user_to_id:
                                response['status'] = 'online'
                    reply(response)
                    data['from'] = resp.user['id']
                    reply(data)
                    broadcast(data)

                elif data['type'] == 'login':
                    res = {'type': 'login',  'logined': False}
                    print(data)
                    user = await db.check_password(pool, data)
                    print(user)
                    if user:
                        res['logined'] = True
                        del user['password'] 
                        resp.user = user
                    reply(res)

                elif data['type'] == 'register':
                    user = await db.create_user(pool, data)
                    res = {'type': 'register',  'logined': False}
                    if user:
                        res['logined'] = True
                        user.update(data)
                        del user['password'] 
                        resp.user = user
                    reply(res)

                else:
                    reply({'error': 'Message type is incorect'})
            else:
                reply({'error': 'Cannot parse request message'})
        else:
            break

    request.app['sockets'].remove(resp)
    print('Someone disconnected.')
    for ws in request.app['sockets']:
        ws.send_str('Someone disconnected.')
    return resp
Ejemplo n.º 21
0
def test_can_start_ok(make_request):
    req = make_request("GET", "/", protocols=True)
    ws = WebSocketResponse(protocols=("chat",))
    with pytest.warns(DeprecationWarning):
        assert (True, "chat") == ws.can_start(req)
Ejemplo n.º 22
0
 def test_can_start_ok(self):
     req = self.make_request('GET', '/')
     ws = WebSocketResponse(protocols=('chat',))
     with self.assertWarns(DeprecationWarning):
         self.assertEqual((True, 'chat'), ws.can_start(req))
Ejemplo n.º 23
0
 def test_can_start_ok(self):
     req = self.make_request('GET', '/', protocols=True)
     ws = WebSocketResponse(protocols=('chat', ))
     with self.assertWarns(DeprecationWarning):
         self.assertEqual((True, 'chat'), ws.can_start(req))