[Twisted-Python] LineReceiver and setRawMode()

Pavel Pergamenshchik ppergame at gmail.com
Thu Sep 7 15:17:06 EDT 2006


On 9/7/06, Thomas HERVE <therve at free.fr> wrote:
>
> Quoting jarrod roberson <jarrod at vertigrated.com>:
>
> > I got a simple line protocol I am trying to implement, blocks .
> >
> > [snip]
> >
> > inside rawDataReceived(data)
> > data = abcdeCMD 10\r\n
> >
> > is there something in twisted that will help with this?
> > or do I need to subclass LineReceiver and add a
> > setRawMode(bytesToRead) or something?
>
> What I've done in this case is something like this:
>
> def rawDataReceived(self, data):
>     self.buffer += data
>     if len(self.buffer) >= self.lenExpected:
>         buf = self.buffer[:self.lenExpected]
>         rem = self.buffer[self.lenExpected:]
>         doSometingWithBuff(buf)
>         self.buffer = ""
>         self.setLineMode()
>         if rem:
>             self.dataReceived(rem)
>
> You need to set the variable self.lenExpected. You read the data and
> when you can all what you needed, you push it back again with
> dataReceived.


setLineMode happens to take an optional argument for the remainder. You
should use that instead of calling dataReceived directly.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://twistedmatrix.com/pipermail/twisted-python/attachments/20060907/33dd05fa/attachment.htm 


More information about the Twisted-Python mailing list