Skip to content

Instantly share code, notes, and snippets.

@elyssonmr
Created February 5, 2019 01:06
Show Gist options
  • Save elyssonmr/992a309885da5a10164fbd84a249562f to your computer and use it in GitHub Desktop.
Save elyssonmr/992a309885da5a10164fbd84a249562f to your computer and use it in GitHub Desktop.
websocket
"""
Fluxo de usuário se conectando
1. usuário vai se conectar usando o websocket
1.1. quando o usuário se conectar vamos adiciona-lo a uma lista (ou dicionado) de usuários conectados
3. Ler os ramais registrados no redis
4. Responder o usuário com a lista de Ramais.
Novo Ramal cadastrado
1. Notificação do evento de novo ramal
2. percorrer a lista de usuários conectados no web socket
3. envia o ramal que se conectou
Ramal se desconectou
1. notificação do evento de deleção de um ramal
2. percorrer a lista de usuários conectados no web socket
3. envia o ramal que se codesconectou
"""
usuarios_conectados = {}
async def hello(websocket, path):
# {"username": "XPTO"}
usuario = json.dumps(await websocket.recv())
usuarios_conectados[ususario["username"]] = websocket
resp = {"usuariosConectados": list(usuarios_conectados.keys())}
await websocket.send(resp)
async def notificar_usuario(ramal, action):
msg_novo_ramal = {"evento": action, "ramal": ramal}
notificacoes = []
for usuario in usuarios_conectados:
notificacoes.append(usuarios_conectados[usuario].send(msg_novo_ramal))
await asyncio.gather(notificacoes)
async def notificar_novo_ramal(ramal):
await notificar_usuario(ramal, "novo")
async def notificar_delete_ramal(ramal):
await notificar_usuario(ramal, "sair")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment