code: def read_message(
          self, callback: Callable[["Future[Union[None, str, bytes]]"], None] = None
      ) -> Awaitable[Union[None, str, bytes]]:
          
  
          awaitable = self.read_queue.get()
          if callback is not None:
              self.io_loop.add_future(asyncio.ensure_future(awaitable), callback)
          return awaitable
docs: Reads a message from the WebSocket server.
  
          If on_message_callback was specified at WebSocket
          initialization, this function will never return messages
  
          Returns a future whose result is the message, or None
          if the connection is closed.  If a callback argument
          is given it will be called with the future when it is
          ready.