code: async def receive(self) -> Message:
          
          if self.client_state == WebSocketState.CONNECTING:
              message = await self._receive()
              message_type = message["type"]
              assert message_type == "websocket.connect"
              self.client_state = WebSocketState.CONNECTED
              return message
          elif self.client_state == WebSocketState.CONNECTED:
              message = await self._receive()
              message_type = message["type"]
              assert message_type in {"websocket.receive", "websocket.disconnect"}
              if message_type == "websocket.disconnect":
                  self.client_state = WebSocketState.DISCONNECTED
              return message
          else:
              raise RuntimeError(
                  'Cannot call "receive" once a disconnect message has been received.'
              )
docs: Receive ASGI websocket messages, ensuring valid state transitions.