docs: def on_message(self, ws, reply, *args):
          """ This method is called by the websocket connection on every
              message that is received. If we receive a ``notice``, we
              hand over post-processing and signalling of events to
              ``process_notice``.
          """
          log.debug("Received message: %s" % str(reply))
          data = {}
          try:
              data = json.loads(reply, strict=False)
          except ValueError:
              raise ValueError("API node returned invalid format. Expected JSON!")
  
          if data.get("method") == "notice":
              id = data["params"][0]
  
              if id >= len(self.__events__):
                  log.critical("Received an id that is out of range\n\n" + str(data))
                  return
  
              # This is a "general" object change notification
              if id == self.__events__.index("on_object"):
                  # Let's see if a specific object has changed
                  for notice in data["params"][1]:
                      try:
                          if "id" in notice:
                              self.process_notice(notice)
                          else:
                              for obj in notice:
                                  if "id" in obj:
                                      self.process_notice(obj)
                      except Exception as e:
                          log.critical(
                              "Error in process_notice: {}\n\n{}".format(
                                  str(e), traceback.format_exc
                              )
                          )
              else:
                  try:
                      callbackname = self.__events__[id]
                      log.info("Patching through to call %s" % callbackname)
                      [getattr(self.events, callbackname)(x) for x in data["params"][1]]
                  except Exception as e:
                      log.critical(
                          "Error in {}: {}\n\n{}".format(
                              callbackname, str(e), traceback.format_exc()
                          )
                      )