def feed(self, bytes): """ Returns a list of DecodedMsg instances. """ jbuf = self._jbuf jbuf.extend(bytes) msgs = [] while True: if self._hdr is None: if len(jbuf) < HDR_LEN: break hdrbytes = jbuf.popleft(HDR_LEN) self._hdr = Hdr.decode(hdrbytes) else: if len(jbuf) < self._hdr.length: break bodybytes = jbuf.popleft(self._hdr.length) m = DecodedMsg(self._hdr, bodybytes) msgs.append(m) self._hdr = None return msgs
def feed(self, bytes): callbacks = self._callbacks jbuf = self._jbuf jbuf.extend(bytes) while True: if self._hdr is None: if len(jbuf) < HDR_LEN: break hdrbytes = jbuf.popleft(HDR_LEN) self._hdr = Hdr.decode(hdrbytes) else: if len(jbuf) < self._hdr.length: break if self._hdr.type in callbacks: bodybytes = jbuf.popleft(self._hdr.length) m = DecodedMsg(self._hdr, bodybytes) callbacks[self._hdr.type](m) elif self._log is not None: jbuf.popleft(self._hdr.length, False) self._log.warning("Unhandled message type=%d", self._hdr.type) self._hdr = None