On Jul 1, 2011, at 8:04 AM, Emmanuel Lecharny wrote: > On 7/1/11 4:59 PM, Alan D. Cabrera wrote: >> On Jun 30, 2011, at 4:13 PM, Emmanuel Lecharny wrote: >> >>> On 6/30/11 9:52 PM, Alan D. Cabrera wrote: >>>> On Jun 30, 2011, at 2:42 AM, Ashish wrote: >>>> >>>>> <snip/> >>>>> This does meet some of our requirements, but not all. We can have >>>>> something >>>>> similar to this and instead of returning true/false >>>>> from Filters, we can return the next step to be executed. Something like >>>>> this >>>>> >>>>> IoFilter messageReceived(IoSession session, Object message) { >>>>> // process >>>>> >>>>> // see if just to flow with Filter Chain >>>>> return null; // or something better >>>>> >>>>> // or >>>>> // a diff message detected, calculate next filter based on some app >>>>> specific state >>>>> return calculateNextFilter(state); >>>>> } >>>>> >>>>> command is passed back to the chain and it can take care of executing the >>>>> next filter. >>>>> >>>>> Shall try something similar in sandbox and lets see how it goes :) >>>> I'm not so sure that filters should be in charge of deciding who should be >>>> called next. I don't think that how the filter stack is assembled should >>>> be leaked into the filters themselves. The filter should be solely >>>> concerned with its task and not have to decide who gets called next. >>> Not sure, Alan. There are some cases where it's mandatory that a filter >>> select the next filter to execute : for instance, if your codec produces >>> more than one message, and the following processing may depend on the >>> message type. Of course, you can use a demux protocol filter (I don't >>> exactly remember the name of it, so it's from the top of my head, but we >>> use such a mechanism in ADS), but it's just one option. >> >> I'm hearing a state machine that's implicitly defined via what gets returned >> by that method. If this is the case would it not be better to have an >> explicitly defined state machine? > > Not necessarily. We can think about a multiple layer decoder which works the > very same way.
I'm hearing possibility not necessity. > But all in all, in this case, the chain of filters will *be* a state machine. And here is my point. They all are really state machines. Having network protocols "randomly" choosing chain paths is an anti-pattern. State machines should be known and fixed at the time of protocol initiation. > I have some ideas (and I even have created some branch years ago: > http://svn.apache.org/viewvc/mina/branches/mina-new-chain/ and > http://svn.apache.org/viewvc/mina/branches/mina-new-chain2/) to play around > this idea. I'll take a peek at these. Thanks! Regards, Alan