| 89 | await self.on_disconnect(websocket, close_code) |
| 90 | |
| 91 | async def decode(self, websocket: WebSocket, message: Message) -> Any: |
| 92 | if self.encoding == class="st">"text": |
| 93 | if class="st">"text" not in message: |
| 94 | await websocket.close(code=status.WS_1003_UNSUPPORTED_DATA) |
| 95 | raise RuntimeError(class="st">"Expected text websocket messages, but got bytes") |
| 96 | return message[class="st">"text"] |
| 97 | |
| 98 | elif self.encoding == class="st">"bytes": |
| 99 | if class="st">"bytes" not in message: |
| 100 | await websocket.close(code=status.WS_1003_UNSUPPORTED_DATA) |
| 101 | raise RuntimeError(class="st">"Expected bytes websocket messages, but got text") |
| 102 | return message[class="st">"bytes"] |
| 103 | |
| 104 | elif self.encoding == class="st">"json": |
| 105 | if message.get(class="st">"text") is not None: |
| 106 | text = message[class="st">"text"] |
| 107 | else: |
| 108 | text = message[class="st">"bytes"].decode(class="st">"utf-8") |
| 109 | |
| 110 | try: |
| 111 | return json.loads(text) |
| 112 | except json.decoder.JSONDecodeError: |
| 113 | await websocket.close(code=status.WS_1003_UNSUPPORTED_DATA) |
| 114 | raise RuntimeError(class="st">"Malformed JSON data received.") |
| 115 | |
| 116 | assert self.encoding is None, fclass="st">"Unsupported &class="cm">#x27;encoding' attribute {self.encoding}" |
| 117 | return message[class="st">"text"] if message.get(class="st">"text") else message[class="st">"bytes"] |
| 118 | |
| 119 | async def on_connect(self, websocket: WebSocket) -> None: |
| 120 | class="st">""class="st">"Override to handle an incoming websocket connection"class="st">"" |