| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 | import re, datetime, os, urllib, json, djangoos.environ.setdefault('DJANGO_SETTINGS_MODULE', 'greaterwms.settings')os.environ["DJANGO_ALLOW_ASYNC_UNSAFE"] = "true"django.setup()from rest_framework.exceptions import APIExceptionfrom staff.models import ListModel as staffCONECTINGS = {}async def websocket_application(scope, receive, send):    while True:        event = await receive()        if event['type'] == 'websocket.connect':            await send({'type': 'websocket.accept'})            query_string = scope.get('query_string', b'').decode()            qs = urllib.parse.parse_qs(query_string)            openid = qs.get('openid', [''])[0]            sender = qs.get('sender', [''])[0] + '-' + openid            CONECTINGS[sender] = send        elif event['type'] == 'websocket.receive':            query_string = scope.get('query_string', b'').decode()            qs = urllib.parse.parse_qs(query_string)            openid = qs.get('openid', [''])[0]            sender = qs.get('sender', [''])[0]            receiver = qs.get('receiver', [''])[0]            if staff.objects.filter(openid=openid, staff_name=receiver).exists():                sender_guy = sender + '-' + openid                receiver_guy = receiver + '-' + openid                text = {                    "sender": sender,                    "receiver": receiver,                    "detail": str(event['text']),                    "create_time": datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'),                    "update_time": datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'),                }                send = CONECTINGS[sender_guy]                if receiver_guy in CONECTINGS:                    send = CONECTINGS[receiver_guy]                    await send({                        'type': 'websocket.send',                        'text': str(text).replace('\'', '\"')                    })            else:                raise APIException({"detail": "Can Not Send Message To Who Not Yours"})        elif event['type'] == 'websocket.disconnect':            try:                query_string = scope.get('query_string', b'').decode()                qs = urllib.parse.parse_qs(query_string)                openid = qs.get('openid', [''])[0]                sender = qs.get('sender', [''])[0] + '-' + openid                CONECTINGS.pop(sender)                break            except:                break        else:            pass
 |