def spam_coro(app): try: while True: yield from asyncio.sleep(1.5) print('spam') sockjs.get_manager(SOCKJS_MNGR, app).broadcast('spam') except asyncio.CancelledError: pass
def arduino_coro(app): try: while True: line = yield from app.loop.run_in_executor(None, arduino_readline, app) print(line) sockjs.get_manager(SOCKJS_MNGR, app).broadcast(line) except asyncio.CancelledError: pass finally: app[ARDUINO_PORT].close()
async def sockjs_on_app_shutdown(app): """ attach to the web.Application.on_shutdown signal to cleanup websockets on application shutdown http://aiohttp.readthedocs.io/en/stable/web_reference.html#aiohttp.web.Application.on_shutdown """ session_manager = sockjs.get_manager('chat_update', app) await session_manager.clear() session_manager.stop()
def broadcast_message(topic, info): manager = sockjs.get_manager('clients', app) for session in manager.sessions: if not session.expired: if hasattr(session, 'subscriptions'): if topic in session.subscriptions: subscription = session.subscriptions[topic] headers = {} headers['subscription'] = subscription headers['content-type'] = 'application/json' headers['message-id'] = str(uuid.uuid1()) body = json.dumps(info).encode('UTF-8') frame = StompFrame(command='MESSAGE', headers=headers, body=body) session.send(bytes(frame).decode('UTF-8'))
def socks_backend(msg, session): parser = StompParser('1.1') if msg.data: parser.add(msg.data.encode('UTF-8')) frame = parser.get() manager = sockjs.get_manager('clients', app) if msg.tp == sockjs.MSG_OPEN: pass elif msg.tp == sockjs.MSG_MESSAGE: if frame.command == 'CONNECT': headers = {} headers['session'] = session.id msg = StompFrame(command='CONNECTED', headers=headers) session.send(bytes(msg).decode('UTF-8')) session.subscriptions = {} elif frame.command == 'SUBSCRIBE': subscription = frame.headers['id'] session.subscriptions[frame.headers['destination']] = subscription elif frame.command == 'UNSUBSCRIBE': del session.subscriptions[frame.headers['destination']] elif msg.tp == sockjs.MSG_CLOSE: pass elif msg.tp == sockjs.MSG_CLOSED: pass
def close_open_connections(app): mngr = sockjs.get_manager(SOCKJS_MNGR, app) yield from mngr.clear() mngr.stop()
def broadcastDetails(self, includeSetpoint=False): manager = sockjs.get_manager('%s-ws'%self.name, app) details = self.getDetails() if not includeSetpoint: details.pop('setpoint', None) manager.broadcast(details)