On Aug 26, 2011, at 7:54 AM, Emmanuel Lecharny wrote: > On 8/26/11 4:41 PM, Julien Vermillard wrote: >> On Fri, Aug 26, 2011 at 4:28 PM, Alan D. Cabrera<[email protected]> >> wrote: >>> On Aug 26, 2011, at 7:12 AM, Julien Vermillard wrote: >>> >>>> On Fri, Aug 26, 2011 at 4:07 PM, Emmanuel Lecharny<[email protected]> >>>> 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<[email protected]> >>>>>>> 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 think we need to avoid complex feature like graph. IMHO server in >> MINA is a codec and an handler 90% of the time. Someone have a use >> case which could use filter graph with MINA ? > > yes. We use it for LDAP... And we have had some users asking how to manage a > decoder for multiple kind of messages. > > This is not something we want just because it's beautiful. > > Now, what about having a controller hidding the internal structure, so that > we can switch to a graph later ? IMO, we should not expose the inner data > structure, be it a list or a graph. It's the controller's business to deal > with that. > > However, we must provide the current state to the controller, it's not enough > to provide the current filter.
Look at how things are set up in my sandbox. The parents and children can have any cardinality, even zero. The controller should be able to automatically handle all of that. Regards, Alan
