snacktime wrote:
> So I'm refactoring a very ugly piece of client code that needs to
> implement some fairly complicated error correction over a line based
> tcp protocol.  There are about 10 different error scenarios I have to
> detect and respond differently to.  Think error correction over serial
> lines, that's actually where this was derived from and now it's
> layered over a tcp connection.  Most of the scenarios involve several
> back and forth messages between client and host.  Most of the
> scenarios are very similar, so if you think of it as a tree I might
> not know what scenario I am dealing with until I've gotten 2-3 levels
> deep, and at any point in the tree I need to know where I am and what
> the possible branches are I can take based on the next response from
> the host.
> 
> Any suggestions on how to implement this cleanly?
> 
> Chris

For clues to a possible approach, look at the HTTP client implementation 
in EventMachine. Sync to SCM, and it's in version_0/lib/protocols.

You can get as crazy with this kind of thing as you want, but if your 
requirements are simple you can get away with a variable that indicates 
the current protocol state. Then a simple case statement will constrain 
your possible paths. It's quite rare for a network protocol to be more 
complicated than that. But if yours is, consider using a LALR(1) 
grammar.

-- 
Posted via http://www.ruby-forum.com/.