code: def listen(self, wait=60, blocking=True):
          
          url = get_url("/remote/status.json")
  
          def listen_for_status_change():
              params = {"oauth": self._oauth_token, "csrf": self._csrf_token}
              r = self._request(url=url, params=params)
              old = r.json()
              self.emit("status_change", old)
              params = {
                  "oauth": self._oauth_token,
                  "csrf": self._csrf_token,
                  "returnon": "play,pause,error,ap",
                  "returnafter": wait,
              }
              while True:
                  r = self._request(url=url, params=params)
                  new = r.json()
  
                  if new != old:
                      self.emit("status_change", new)
  
                  if new["playing"] != old["playing"]:
                      self.emit("play_state_change", new)
  
                  if (
                      new["track"]["track_resource"]["uri"]
                      != old["track"]["track_resource"]["uri"]
                  ):
                      self.emit("track_change", new)
  
                  old = new
  
          if blocking:
              listen_for_status_change()
          else:
              thread = Thread(target=listen_for_status_change)
              thread.daemon = True
              thread.start()
docs: Listen for events and call any associated callbacks when there is an event.
          There are three events you can subscribe too; **status_change**, **play_state_change**, **track_change**
  
          :param wait: how long to wait for a response before starting a new connection
          :param blocking: if listen should block the current process or not