예제 #1
0
 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
예제 #2
0
 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