Work on websockets. A lot...
This commit is contained in:
@@ -3,6 +3,12 @@ from fastapi.responses import HTMLResponse
|
||||
from pydantic import BaseModel, EmailStr, Field
|
||||
from typing import Dict, List, Optional, Set, Union
|
||||
import redis, asyncio, base64, datetime, hashlib, json, os, pathlib, shutil, time
|
||||
# import asyncio, base64, datetime, hashlib, json, os, pathlib, shutil, time
|
||||
# import aioredis, redis, asyncio, base64, datetime, hashlib, json, os, pathlib, shutil, time
|
||||
# from aioredis import from_url, Redis
|
||||
# import asyncio
|
||||
# import aioredis
|
||||
# import async_timeout
|
||||
|
||||
from app.lib_general import log, logging, common_route_params, Common_Route_Params, common_route_params_min, Common_Route_Params_Min
|
||||
from app.config import settings
|
||||
@@ -71,11 +77,127 @@ class ConnectionManager:
|
||||
|
||||
async def connect(self, websocket: WebSocket):
|
||||
await websocket.accept()
|
||||
log.info('WS connect')
|
||||
log.setLevel(logging.DEBUG)
|
||||
log.info('WS connect: Header Security Key:'+websocket.headers.get('sec-websocket-key'))
|
||||
# log.debug(dir(websocket))
|
||||
# log.debug(websocket.client) # the Address(host=ip, port=number)
|
||||
# log.info('WS Key: '+websocket.headers.get('sec-websocket-key'))
|
||||
# log.debug(websocket.headers) # Most useful
|
||||
# log.debug(websocket.app) # Nope
|
||||
# log.debug(websocket.app()) # Nope
|
||||
# log.debug(websocket.session) # Nope
|
||||
# log.debug(websocket.session()) # Nope
|
||||
# log.debug(websocket.user) # Nope
|
||||
# log.debug(websocket.values()) # Not sure if useful
|
||||
|
||||
self.active_connections.append(websocket)
|
||||
log.debug(self.active_connections)
|
||||
|
||||
redis_conn = redis.Redis(host=settings.REDIS['server'], port=settings.REDIS['port'], db=6, password=None, encoding='utf-8', decode_responses=True)
|
||||
|
||||
# message = {'hello': 'world', 'goodbye': 'test'}
|
||||
# data = json.loads(message)
|
||||
|
||||
ws_header_key = websocket.headers.get('sec-websocket-key')
|
||||
key_name = f'ws:sec_key:{ws_header_key}'
|
||||
data = {'ws_header_key': ws_header_key}
|
||||
|
||||
redis_conn.setex(key_name, datetime.timedelta(minutes=90), json.dumps(data))
|
||||
|
||||
r_entry = json.loads(redis_conn.get(key_name)) # For testing...
|
||||
r_ttl = redis_conn.ttl(key_name) # For testing...
|
||||
|
||||
# log.debug(r_entry) # For testing...
|
||||
# log.debug(r_entry.get('ws_header_key')) # For testing...
|
||||
# log.debug(r_ttl) # For testing...
|
||||
|
||||
|
||||
|
||||
# r_entries = redis.scan()
|
||||
# log.debug(r_entries)
|
||||
|
||||
redis_conn.close()
|
||||
# await redis.close()
|
||||
|
||||
async def connect_w_client_id(self, websocket: WebSocket, client_id: str, group_id = None):
|
||||
await websocket.accept()
|
||||
log.setLevel(logging.DEBUG)
|
||||
log.info('WS connect: Header Security Key:'+websocket.headers.get('sec-websocket-key'))
|
||||
|
||||
self.active_connections.append(websocket)
|
||||
log.debug(self.active_connections)
|
||||
|
||||
redis_conn = redis.Redis(host=settings.REDIS['server'], port=settings.REDIS['port'], db=6, password=None, encoding='utf-8', decode_responses=True)
|
||||
|
||||
# # ### Redis ### Testing One
|
||||
# ws_header_key = websocket.headers.get('sec-websocket-key')
|
||||
# key_name = f'ws:sec_key:{ws_header_key}'
|
||||
# data = {'ws_header_key': ws_header_key}
|
||||
|
||||
# redis_conn.setex(key_name, datetime.timedelta(minutes=90), json.dumps(data))
|
||||
|
||||
# r_entry = json.loads(redis_conn.get(key_name)) # For testing...
|
||||
# r_ttl = redis_conn.ttl(key_name) # For testing...
|
||||
|
||||
# # log.debug(r_entry) # For testing...
|
||||
# # log.debug(r_entry.get('ws_header_key')) # For testing...
|
||||
# # log.debug(r_ttl) # For testing...
|
||||
|
||||
# # ### Redis ### Testing Two!!
|
||||
# key_name = f'ws:conn:{ws_header_key}'
|
||||
# data = websocket
|
||||
|
||||
# redis_conn.setex(key_name, datetime.timedelta(minutes=90), json.dumps(data))
|
||||
|
||||
# r_entry = json.loads(redis_conn.get(key_name)) # For testing...
|
||||
|
||||
# log.debug(r_entry) # For testing...
|
||||
|
||||
|
||||
# ### Redis ### Testing Three!!!
|
||||
ws_header_key = websocket.headers.get('sec-websocket-key')
|
||||
|
||||
# # Set WS connection in Redis based on WS header security key
|
||||
# key_name = f'ws:header_key:{ws_header_key}'
|
||||
# data = {'ws_conn': websocket}
|
||||
|
||||
# redis_conn.setex(key_name, datetime.timedelta(minutes=90), json.dumps(data))
|
||||
|
||||
# Get new ws_header_key and group_id
|
||||
ws_header_key = websocket.headers.get('sec-websocket-key')
|
||||
group_id = websocket.path_params.get('group_id')
|
||||
|
||||
# Figure out key_name
|
||||
key_name = f'ws:group_id:{group_id}'
|
||||
|
||||
# Get the current list from Redis entry
|
||||
|
||||
# group_id_ws_conn_li = []
|
||||
# group_id_ws_conn_li = redis_conn.get(key_name, [])
|
||||
|
||||
# Add the new WS connection's header key to the list
|
||||
redis_conn.lpush(key_name, ws_header_key)
|
||||
|
||||
# group_id_ws_conn_li.append(ws_header_key)
|
||||
|
||||
# data = group_id_ws_conn_li
|
||||
|
||||
# redis_conn.hsetex(key_name, datetime.timedelta(minutes=90), json.dumps(data))
|
||||
|
||||
|
||||
# r_entry = json.loads(redis_conn.lget(key_name)) # For testing...
|
||||
log.debug('BEGIN: Loop through list key')
|
||||
log.debug(redis_conn.llen(key_name))
|
||||
|
||||
# for i in range(0, redis_conn.llen(key_name)):
|
||||
# log.debug(redis_conn.lindex(key_name, i))
|
||||
|
||||
log.debug('END: Loop through list key')
|
||||
|
||||
redis_conn.close()
|
||||
|
||||
def disconnect(self, websocket: WebSocket):
|
||||
log.setLevel(logging.DEBUG)
|
||||
log.info('WS disconnect')
|
||||
self.active_connections.remove(websocket)
|
||||
|
||||
@@ -105,13 +227,52 @@ class ConnectionManager:
|
||||
log.setLevel(logging.INFO)
|
||||
log.debug(locals())
|
||||
|
||||
for connection in self.active_connections:
|
||||
log.debug(vars(connection))
|
||||
# websocket.path_params.get('client_id')
|
||||
# if connection.scope.get('path') == group_id:
|
||||
if connection.path_params.get('group_id') == group_id:
|
||||
log.info('Found matching Group ID')
|
||||
await connection.send_json(data)
|
||||
# Single process version...
|
||||
# for connection in self.active_connections:
|
||||
# log.debug(vars(connection))
|
||||
# # websocket.path_params.get('client_id') # Testing...
|
||||
# # if connection.scope.get('path') == group_id: # Testing...
|
||||
|
||||
# if connection.path_params.get('group_id') == group_id:
|
||||
# log.info('Found matching Group ID')
|
||||
# await connection.send_json(data)
|
||||
|
||||
# Redis version...
|
||||
redis_conn = redis.Redis(host=settings.REDIS['server'], port=settings.REDIS['port'], db=6, password=None, encoding='utf-8', decode_responses=True)
|
||||
|
||||
# Figure out key_name
|
||||
key_name = f'ws:group_id:{group_id}'
|
||||
|
||||
log.debug('BEGIN: Loop through Redis list entry')
|
||||
log.debug(redis_conn.llen(key_name))
|
||||
|
||||
# ws_header_key = connection.headers.get('sec-websocket-key')
|
||||
# ws_header_key = f'ws:header_key:{ws_header_key}'
|
||||
# log.debug(f'Looking for: {ws_header_key}')
|
||||
|
||||
for i in range(0, redis_conn.llen(key_name)):
|
||||
log.debug(f'{i}: {redis_conn.lindex(key_name, i)}')
|
||||
redis_ws_group_ws_header_key = redis_conn.lindex(key_name, i)
|
||||
|
||||
# Check if they key
|
||||
# redis_key_name_ws_conn = f'ws:header_key:{redis_ws_group_ws_header_key}'
|
||||
# ws_conn_data = json.loads(redis_conn.get('redis_key_name_ws_conn'))
|
||||
# active_ws_conn = ws_conn_data.get('ws_conn')
|
||||
# log.debug(active_ws_conn)
|
||||
for active_ws_conn in self.active_connections:
|
||||
log.debug(vars(active_ws_conn))
|
||||
|
||||
ws_header_key = active_ws_conn.headers.get('sec-websocket-key')
|
||||
|
||||
if redis_ws_group_ws_header_key == ws_header_key:
|
||||
log.info(f'Found key in Redis list!')
|
||||
await active_ws_conn.send_json(data)
|
||||
else:
|
||||
log.debug(f'Key not found in Redis list')
|
||||
|
||||
log.debug('END: Loop through Redis list entry')
|
||||
|
||||
redis_conn.close()
|
||||
|
||||
# NOTE: Same as group, but no filter based on path
|
||||
async def broadcast(self, message: str):
|
||||
@@ -138,12 +299,289 @@ class ConnectionManager:
|
||||
manager = ConnectionManager()
|
||||
|
||||
|
||||
|
||||
# class AIOConnectionManager:
|
||||
# def __init__(self):
|
||||
# # NOTE: The active_connections list should be in Redis
|
||||
# self.active_connections: List[WebSocket] = []
|
||||
|
||||
# async def connect(self, websocket: WebSocket):
|
||||
# await websocket.accept()
|
||||
# log.setLevel(logging.DEBUG)
|
||||
# log.info('WS connect: Header Security Key:'+websocket.headers.get('sec-websocket-key'))
|
||||
# # log.debug(websocket.client) # the Address(host=ip, port=number)
|
||||
# # log.info('WS Key: '+websocket.headers.get('sec-websocket-key'))
|
||||
# # log.debug(websocket.headers) # Most useful
|
||||
|
||||
# self.active_connections.append(websocket)
|
||||
# log.debug(self.active_connections)
|
||||
|
||||
# redis_conn = aioredis.Redis(host=settings.REDIS['server'], port=settings.REDIS['port'], db=6, password=None, encoding='utf-8', decode_responses=True)
|
||||
|
||||
# # message = {'hello': 'world', 'goodbye': 'test'}
|
||||
# # data = json.loads(message)
|
||||
|
||||
# ws_header_key = websocket.headers.get('sec-websocket-key')
|
||||
# key_name = f'ws:sec_key:{ws_header_key}'
|
||||
# data = {'ws_header_key': ws_header_key}
|
||||
|
||||
# await redis_conn.setex(key_name, datetime.timedelta(minutes=90), json.dumps(data))
|
||||
|
||||
# r_entry = json.loads(await redis_conn.get(key_name)) # For testing...
|
||||
# r_ttl = await redis_conn.ttl(key_name) # For testing...
|
||||
|
||||
# # log.debug(r_entry) # For testing...
|
||||
# # log.debug(r_entry.get('ws_header_key')) # For testing...
|
||||
# # log.debug(r_ttl) # For testing...
|
||||
|
||||
|
||||
|
||||
# # r_entries = redis.scan()
|
||||
# # log.debug(r_entries)
|
||||
|
||||
# redis_conn.close()
|
||||
# # await redis.close()
|
||||
|
||||
# async def connect_w_client_id(self, websocket: WebSocket, client_id: str, group_id = None):
|
||||
# await websocket.accept()
|
||||
# log.setLevel(logging.DEBUG)
|
||||
# log.info('WS connect: Header Security Key:'+websocket.headers.get('sec-websocket-key'))
|
||||
|
||||
# self.active_connections.append(websocket)
|
||||
# log.debug(self.active_connections)
|
||||
|
||||
# redis_conn = redis.Redis(host=settings.REDIS['server'], port=settings.REDIS['port'], db=6, password=None, encoding='utf-8', decode_responses=True)
|
||||
|
||||
# # # ### Redis ### Testing One
|
||||
# # ws_header_key = websocket.headers.get('sec-websocket-key')
|
||||
# # key_name = f'ws:sec_key:{ws_header_key}'
|
||||
# # data = {'ws_header_key': ws_header_key}
|
||||
|
||||
# # redis_conn.setex(key_name, datetime.timedelta(minutes=90), json.dumps(data))
|
||||
|
||||
# # r_entry = json.loads(redis_conn.get(key_name)) # For testing...
|
||||
# # r_ttl = redis_conn.ttl(key_name) # For testing...
|
||||
|
||||
# # # log.debug(r_entry) # For testing...
|
||||
# # # log.debug(r_entry.get('ws_header_key')) # For testing...
|
||||
# # # log.debug(r_ttl) # For testing...
|
||||
|
||||
# # # ### Redis ### Testing Two!!
|
||||
# # key_name = f'ws:conn:{ws_header_key}'
|
||||
# # data = websocket
|
||||
|
||||
# # redis_conn.setex(key_name, datetime.timedelta(minutes=90), json.dumps(data))
|
||||
|
||||
# # r_entry = json.loads(redis_conn.get(key_name)) # For testing...
|
||||
|
||||
# # log.debug(r_entry) # For testing...
|
||||
|
||||
|
||||
# # ### Redis ### Testing Three!!!
|
||||
# ws_header_key = websocket.headers.get('sec-websocket-key')
|
||||
|
||||
# # # Set WS connection in Redis based on WS header security key
|
||||
# # key_name = f'ws:header_key:{ws_header_key}'
|
||||
# # data = {'ws_conn': websocket}
|
||||
|
||||
# # redis_conn.setex(key_name, datetime.timedelta(minutes=90), json.dumps(data))
|
||||
|
||||
# # Get new ws_header_key and group_id
|
||||
# ws_header_key = websocket.headers.get('sec-websocket-key')
|
||||
# group_id = websocket.path_params.get('group_id')
|
||||
|
||||
# # Figure out key_name
|
||||
# key_name = f'ws:group_id:{group_id}'
|
||||
|
||||
# # Get the current list from Redis entry
|
||||
|
||||
# # group_id_ws_conn_li = []
|
||||
# # group_id_ws_conn_li = redis_conn.get(key_name, [])
|
||||
|
||||
# # Add the new WS connection's header key to the list
|
||||
# redis_conn.lpush(key_name, ws_header_key)
|
||||
|
||||
# # group_id_ws_conn_li.append(ws_header_key)
|
||||
|
||||
# # data = group_id_ws_conn_li
|
||||
|
||||
# # redis_conn.hsetex(key_name, datetime.timedelta(minutes=90), json.dumps(data))
|
||||
|
||||
|
||||
# # r_entry = json.loads(redis_conn.lget(key_name)) # For testing...
|
||||
# log.debug('BEGIN: Loop through list key')
|
||||
# log.debug(redis_conn.llen(key_name))
|
||||
|
||||
# # for i in range(0, redis_conn.llen(key_name)):
|
||||
# # log.debug(redis_conn.lindex(key_name, i))
|
||||
|
||||
# log.debug('END: Loop through list key')
|
||||
|
||||
# redis_conn.close()
|
||||
|
||||
# def disconnect(self, websocket: WebSocket):
|
||||
# log.setLevel(logging.DEBUG)
|
||||
# log.info('WS disconnect')
|
||||
# self.active_connections.remove(websocket)
|
||||
|
||||
|
||||
# # Targets: echo, direct, group, broadcast
|
||||
# # send_ text, bytes, json
|
||||
# # receive_ text, bytes, json
|
||||
# async def echo(self, message: str, websocket: WebSocket):
|
||||
# log.setLevel(logging.DEBUG)
|
||||
# # log.debug(dir(websocket))
|
||||
# log.debug(vars(websocket))
|
||||
# log.debug(websocket.url)
|
||||
# log.debug(websocket.client)
|
||||
# log.debug(websocket.client_state)
|
||||
# log.debug(websocket.headers['sec-websocket-key'])
|
||||
# # log.debug(base64.decode(bytes(websocket.headers['sec-websocket-key']), 'utf-8'))
|
||||
# await websocket.send_text(message)
|
||||
|
||||
# async def direct(self, from_client_id: str, to_client_id: str, data: dict):
|
||||
# log.setLevel(logging.DEBUG)
|
||||
# for connection in self.active_connections:
|
||||
# log.debug(vars(connection))
|
||||
# log.debug(connection)
|
||||
# await connection.send_text(message)
|
||||
|
||||
# async def group(self, group_id: str, data: dict):
|
||||
# log.setLevel(logging.INFO)
|
||||
# log.debug(locals())
|
||||
|
||||
# # Single process version...
|
||||
# # for connection in self.active_connections:
|
||||
# # log.debug(vars(connection))
|
||||
# # # websocket.path_params.get('client_id') # Testing...
|
||||
# # # if connection.scope.get('path') == group_id: # Testing...
|
||||
|
||||
# # if connection.path_params.get('group_id') == group_id:
|
||||
# # log.info('Found matching Group ID')
|
||||
# # await connection.send_json(data)
|
||||
|
||||
# # Redis version...
|
||||
# redis_conn = redis.Redis(host=settings.REDIS['server'], port=settings.REDIS['port'], db=6, password=None, encoding='utf-8', decode_responses=True)
|
||||
|
||||
# # Figure out key_name
|
||||
# key_name = f'ws:group_id:{group_id}'
|
||||
|
||||
# log.debug('BEGIN: Loop through Redis list entry')
|
||||
# log.debug(redis_conn.llen(key_name))
|
||||
|
||||
# # ws_header_key = connection.headers.get('sec-websocket-key')
|
||||
# # ws_header_key = f'ws:header_key:{ws_header_key}'
|
||||
# # log.debug(f'Looking for: {ws_header_key}')
|
||||
|
||||
# for i in range(0, redis_conn.llen(key_name)):
|
||||
# log.debug(f'{i}: {redis_conn.lindex(key_name, i)}')
|
||||
# redis_ws_group_ws_header_key = redis_conn.lindex(key_name, i)
|
||||
|
||||
# # Check if they key
|
||||
# # redis_key_name_ws_conn = f'ws:header_key:{redis_ws_group_ws_header_key}'
|
||||
# # ws_conn_data = json.loads(redis_conn.get('redis_key_name_ws_conn'))
|
||||
# # active_ws_conn = ws_conn_data.get('ws_conn')
|
||||
# # log.debug(active_ws_conn)
|
||||
# for active_ws_conn in self.active_connections:
|
||||
# log.debug(vars(active_ws_conn))
|
||||
|
||||
# ws_header_key = active_ws_conn.headers.get('sec-websocket-key')
|
||||
|
||||
# if redis_ws_group_ws_header_key == ws_header_key:
|
||||
# log.info(f'Found key in Redis list!')
|
||||
# await active_ws_conn.send_json(data)
|
||||
# else:
|
||||
# log.debug(f'Key not found in Redis list')
|
||||
|
||||
# log.debug('END: Loop through Redis list entry')
|
||||
|
||||
# redis_conn.close()
|
||||
|
||||
# # NOTE: Same as group, but no filter based on path
|
||||
# async def broadcast(self, message: str):
|
||||
# log.setLevel(logging.INFO)
|
||||
# log.debug(locals())
|
||||
|
||||
# for connection in self.active_connections:
|
||||
# log.debug(vars(connection))
|
||||
# await connection.send_text(message)
|
||||
|
||||
# async def send_personal_message(self, message: str, websocket: WebSocket):
|
||||
# log.setLevel(logging.DEBUG)
|
||||
# # log.debug(dir(websocket))
|
||||
# log.debug(vars(websocket))
|
||||
# log.debug(websocket.url)
|
||||
# log.debug(websocket.client)
|
||||
# log.debug(websocket.client_state)
|
||||
# log.debug(websocket.headers['sec-websocket-key'])
|
||||
# # log.debug(base64.decode(bytes(websocket.headers['sec-websocket-key']), 'utf-8'))
|
||||
# await websocket.send_text(message)
|
||||
|
||||
|
||||
# aio_manager = AIOConnectionManager()
|
||||
|
||||
|
||||
# Endpoints for???
|
||||
# /room/<id> (just a group of clients; for a related group like a poster presenter or session room)
|
||||
# /client/<id> (for one specific client/browser; something specific to a browser???)
|
||||
# /person/<id> (for one specific person; handles send and receiving their messages)
|
||||
|
||||
|
||||
|
||||
|
||||
@router.websocket('/ws_single/group/{group_id}/client/{client_id}')
|
||||
async def single_ws_client_id(
|
||||
websocket: WebSocket,
|
||||
group_id: str,
|
||||
client_id: str,
|
||||
):
|
||||
await manager.connect_w_client_id(websocket, client_id, group_id)
|
||||
# await aio_manager.connect_w_client_id(websocket, client_id, group_id)
|
||||
try:
|
||||
while True:
|
||||
data = await websocket.receive_json() # Returns dict
|
||||
# log.debug(data)
|
||||
|
||||
# group_path_id = f'/ws/group/{group_id}'
|
||||
# client_id = data.get('client_id')
|
||||
# echo (echo message), dm (direct message), group (group message), all (broadcast message to all), cmd, group_cmd(?)
|
||||
msg_type = data.get('type')
|
||||
cmd = data.get('cmd')
|
||||
msg = data.get('msg')
|
||||
|
||||
log.setLevel(logging.INFO)
|
||||
log.info(f'Group ID: {group_id}; Client ID: {client_id}; Type: {msg_type};')
|
||||
log.debug(f'Command: {cmd}')
|
||||
log.debug(f'Message: {msg}')
|
||||
|
||||
data['client_id'] = client_id
|
||||
data['group_id'] = group_id
|
||||
|
||||
await manager.group(group_id=group_id, data=data)
|
||||
# await aio_manager.group(group_id=group_id, data=data)
|
||||
|
||||
# if msg_type:
|
||||
# if msg_type == 'echo':
|
||||
# await manager.echo(f'Echo: {data}', websocket)
|
||||
# elif msg_type == 'dm':
|
||||
# await manager.direct(f'DM: {msg}')
|
||||
# elif msg_type == 'group':
|
||||
# await manager.group(group_id=group_id, f'Group: {data}')
|
||||
# elif msg_type == 'all':
|
||||
# await manager.broadcast(f'All: {data}')
|
||||
# elif msg_type == 'cmd':
|
||||
# await manager.broadcast(f'Command: {data}')
|
||||
# else:
|
||||
# await manager.broadcast(f'Unknown: {data}')
|
||||
# else:
|
||||
# await manager.broadcast(f'MSG: {data}')
|
||||
|
||||
except WebSocketDisconnect:
|
||||
manager.disconnect(websocket)
|
||||
# aio_manager.disconnect(websocket)
|
||||
# await manager.broadcast(f'Client #{client_id} left')
|
||||
|
||||
|
||||
@router.websocket('/ws/client/{client_id}')
|
||||
async def ws_client_id(
|
||||
websocket: WebSocket,
|
||||
@@ -188,57 +626,6 @@ async def ws_client_id(
|
||||
# await manager.broadcast(f'Client #{client_id} left')
|
||||
|
||||
|
||||
@router.websocket('/ws/group/{group_id}/client/{client_id}')
|
||||
async def ws_client_id(
|
||||
websocket: WebSocket,
|
||||
group_id: str,
|
||||
client_id: str,
|
||||
):
|
||||
await manager.connect(websocket)
|
||||
try:
|
||||
while True:
|
||||
data = await websocket.receive_json() # Returns dict
|
||||
# log.debug(data)
|
||||
|
||||
# group_path_id = f'/ws/group/{group_id}'
|
||||
# client_id = data.get('client_id')
|
||||
# echo (echo message), dm (direct message), group (group message), all (broadcast message to all), cmd, group_cmd(?)
|
||||
msg_type = data.get('type')
|
||||
cmd = data.get('cmd')
|
||||
msg = data.get('msg')
|
||||
|
||||
log.setLevel(logging.INFO)
|
||||
log.info(f'Group ID: {group_id}; Client ID: {client_id}; Type: {msg_type};')
|
||||
log.debug(f'Command: {cmd}')
|
||||
log.debug(f'Message: {msg}')
|
||||
|
||||
data['client_id'] = client_id
|
||||
data['group_id'] = group_id
|
||||
|
||||
await manager.group(group_id=group_id, data=data)
|
||||
|
||||
# if msg_type:
|
||||
# if msg_type == 'echo':
|
||||
# await manager.echo(f'Echo: {data}', websocket)
|
||||
# elif msg_type == 'dm':
|
||||
# await manager.direct(f'DM: {msg}')
|
||||
# elif msg_type == 'group':
|
||||
# await manager.group(group_id=group_id, f'Group: {data}')
|
||||
# elif msg_type == 'all':
|
||||
# await manager.broadcast(f'All: {data}')
|
||||
# elif msg_type == 'cmd':
|
||||
# await manager.broadcast(f'Command: {data}')
|
||||
# else:
|
||||
# await manager.broadcast(f'Unknown: {data}')
|
||||
# else:
|
||||
# await manager.broadcast(f'MSG: {data}')
|
||||
|
||||
except WebSocketDisconnect:
|
||||
manager.disconnect(websocket)
|
||||
# await manager.broadcast(f'Client #{client_id} left')
|
||||
|
||||
|
||||
|
||||
@router.websocket('/ws/{client_id}')
|
||||
async def ws_id(
|
||||
websocket: WebSocket,
|
||||
@@ -259,7 +646,6 @@ async def ws_id(
|
||||
await manager.broadcast(f'Client #{client_id} left')
|
||||
|
||||
|
||||
|
||||
# @router.websocket('/ws/room/{room_id}')
|
||||
# async def ws_room_id(
|
||||
# websocket: WebSocket,
|
||||
@@ -362,6 +748,7 @@ async def redis_connector(
|
||||
|
||||
# redis = await redis.create_pool(redis_url)
|
||||
# Redis client bound to pool of connections (auto-reconnecting).
|
||||
# r = redis.Redis(host=settings.REDIS['server'], port=settings.REDIS['port'], db=7, password=None, decode_responses=True)
|
||||
redis = redis.from_url(
|
||||
redis_url, encoding="utf-8", decode_responses=True
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user