On Aug 26, 2011, at 8:12 AM, Emmanuel Lecharny wrote: > On 8/26/11 4:55 PM, Alan D. Cabrera wrote: >> On Aug 26, 2011, at 7:47 AM, Emmanuel Lecharny wrote: >> >>> On 8/26/11 4:28 PM, Alan D. Cabrera wrote: >>>> On Aug 26, 2011, at 7:12 AM, Julien Vermillard wrote: >>>> >>>>> On Fri, Aug 26, 2011 at 4:07 PM, Emmanuel Lecharny<elecha...@gmail.com> >>>>> wrote: >>>>>> On 8/26/11 3:44 PM, Alan D. Cabrera wrote: >>>>>>> On Aug 26, 2011, at 6:40 AM, Julien Vermillard wrote: >>>>>>> >>>>>>>> On Fri, Aug 26, 2011 at 3:24 PM, Alan D. Cabrera<l...@toolazydogs.com> >>>>>>>> wrote: >>>>>>>>> On Aug 26, 2011, at 4:14 AM, Julien Vermillard wrote: >>>>>>>>> >>>>>>>>>> I modified the API to remove IoFilterChain. Now you are supposed to >>>>>>>>>> give a list of filter to the service before starting it : >>>>>>>>>> >>>>>>>>>> // create the fitler chain for this service >>>>>>>>>> List<IoFilter> filters = new ArrayList<IoFilter>(); >>>>>>>>>> filters.add(new LoggingFilter("byte log filter")); >>>>>>>>>> filters.add(new MyCodecFilter()); >>>>>>>>>> filters.add(new LoggingFilter("pojo log filter")); >>>>>>>>>> filters.add(newMyProtocolLogicFilter()); >>>>>>>>>> >>>>>>>>>> acceptor.setFilters(filters); >>>>>>>>>> >>>>>>>>>> acceptor.bind(...); >>>>>>>>> How do we make chains where two filters feed into one or one filter >>>>>>>>> feeds two filters? If you look in my sandbox we can accommodate this >>>>>>>>> via: >>>>>>>>> >>>>>>>>> static import a.m.util.Util. linkParentWithChild; // to be written >>>>>>>>> >>>>>>>>> IoFilter foo = new FooFilter(); >>>>>>>>> LinkStateFilter link = new LinkStateFilter(); >>>>>>>>> IoFilter checksum = new ChecksumFilter(); >>>>>>>>> IoFilter log = new LogFilter(); >>>>>>>>> >>>>>>>>> link.addLinkStateListener(foo); >>>>>>>>> linkParentWithChild(foo, checksum); >>>>>>>>> linkParentWithChild(link, checksum); >>>>>>>>> linkParentWithChild(checksum, log); >>>>>>>>> >>>>>>>>> acceptor.setFilters(foo); >>>>>>>>> >>>>>>>> About the code in the sandbox : >>>>>>>> >>>>>>>> http://svn.apache.org/repos/asf/mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/IoFilter.java >>>>>>>> I see no IoFilter.addLinkStateListener(..) method, am I looking at the >>>>>>>> right place ? >>>>>>> Oops, it was meant to just be a sketch. :) >>>>>>> >>>>>>>> About the "filters feed into one or one filter feeds two filters", do >>>>>>>> you have a concrete use case in mind for that ? >>>>>>> The above example does, Foo and the link state filter. I'm sure that >>>>>>> we've discussed this before. Another example is a mux/demux situation. >>>>>>> How >>>>>>> would all of this fit into the grand scheme of things? >>>>>> Yeah, it really should be a graph of filters, not a list of filters. >>>>>> >>>>> Well if it's just for demuxing I proposed few mails ago this solution >>>>> : http://s.apache.org/A9W >>>> I think we need to make graphing a 1st class citizen and not buried inside >>>> another filter class. >>> I do agree. The proposed solution on http://s.apache.org/A9W is what we >>> currently have, and it's tedious to manage. >>> >>> It would be way better to be able to let the controler call the next filter >>> based on an evaluation method based on the current state. >>> >>> >>> Now, the question is : how do the controller knows which filter to call >>> next ? It must have the current state, and it must be able to make the >>> connection. >>> >>> For instance, let's say that from filter F we can switch to either filter G >>> or filter H, depending on the state we transit to in F. >>> >>> F --(state1)--> G >>> or >>> F --(state2)--> H >>> >>> That means the controller has a map { (F, state1, G), (F, state2, H)} >>> somewhere. State should be passed to the controller too : >>> >>> ... >>> controller.nextFilter( newState ); >>> ... >>> >>> Pretty theorical at this point... I'm sorry not to have a lot of time to >>> code this, I do realize that for you guys implementing ideas it's a PITA... >> I was thinking of a simple DAG some, or all, of the nodes can be FSMs. >> >> -> [FSM1] -> [Filter] -> [FSM2] -> [Filter] >> >> Inside the FSM there could be chains, but there would be one chain per state. > Not sure I grok what you say here. There is more than one state, and from > each state, you may have more than one transition. > > Maybe it's just a problem of vocabulary... > > <theory> > In a FSM, you transit from Si to Sj, following a transition Ta, which depends > on a context. You may also transit to a state Sk, following a different > transition Tb, if the context is different. > > Selection the transition to follow is all about knowing what's the context > is, and in my sample, this was what I call the 'state', which was most > certainly an error, as it's clearly a transition. I should have wrote : > > F --(transition1)--> G > or > F --(transition2)--> H > > where F, G, H are filters (ore "states") > > are we on the same page ? > > </theory>
Not at all. :) Are F, G, H filters inside the FSM or are they external to the FSM? Regards, Alan