docs: def on_message(self, new_data):
          """Processes incoming messages according to engine-io rules"""
          # https://github.com/socketio/engine.io-protocol
  
          LOGGER.debug("new frame [%r]", new_data)
          try:
              what = int(new_data[0])
              data = new_data[1:]
              data = data and from_json(data)
              if what == 0:
                  self.ping_interval = float(data["pingInterval"]) / 1000
                  LOGGER.debug("adjusted ping interval")
                  return
  
              if what == 1:
                  LOGGER.debug("received close")
                  self.reraise(IOError("Connection closed remotely"))
                  return
  
              if what == 3:
                  self.__lastpong = time.time()
                  LOGGER.debug("received a pong")
                  return
  
              if what == 4:
                  self._on_frame(data)
                  return
  
              if what == 6:
                  LOGGER.debug("received noop")
                  self.send_message("5")
                  return
  
              LOGGER.debug("unhandled message: [%d] [%r]", what, data)
          except Exception as ex:
              self.reraise(ex)