code: def receive(self):
          
  
          self._connect()
          result = self.recvConn.receive()
          if self._hasprop(result, "error"):
              raise CommandError(result["error"])
  
          if self._hasprop(result, "log"):
              self.logs.append(result["log"])
  
          if self._hasprop(result, "subscription"):
              sub = result["subscription"]
              if not (sub in self.subs):
                  self.subs[sub] = []
              self.subs[sub].append(result)
  
              # also accumulate in {root,sub} keyed store
              root = os.path.normpath(os.path.normcase(result["root"]))
              if not root in self.sub_by_root:
                  self.sub_by_root[root] = {}
              if not sub in self.sub_by_root[root]:
                  self.sub_by_root[root][sub] = []
              self.sub_by_root[root][sub].append(result)
  
          return result
docs: receive the next PDU from the watchman service
  
          If the client has activated subscriptions or logs then
          this PDU may be a unilateral PDU sent by the service to
          inform the client of a log event or subscription change.
  
          It may also simply be the response portion of a request
          initiated by query.
  
          There are clients in production that subscribe and call
          this in a loop to retrieve all subscription responses,
          so care should be taken when making changes here.