Write your state to the IoSession and read it from the handler. On Aug 1, 2013 10:06 PM, "Hunter McMillen" <mcmil...@gmail.com> wrote:
> Ok I think I understand the ordering now, we probably don't need an > Executor. Our main issue is still how to link the state machine with our > IoHandlerAdaptor. > > As of right now, after a user is authenticated (by the statemachine), > the sessionIdle() event of the statemachine calls sessionOpened of our > IoHandlerAdapter; obviously this is a logic error because sessionIdle() > will fire frequently. > > So two things: > 1) Is there a way to leave the statemachine after we authenticate someone? > 2) If not, how to map the finishing of authentication to our > IoHandlerAdapter ,specifically we probably don't want to fire a > sessionCreated() event (because a session was already created by the > statemachine), we simply want to pass that to our handler. > > Thanks. > Hunter > > On 8/1/13 9:54 PM, Ashish wrote: > > On Fri, Aug 2, 2013 at 7:15 AM, Jon V. <sybersn...@gmail.com> wrote: > > > >> To my knowledge the executor filter does not guarantee any kind of > order. > >> This means that you should implement the authentication phase before the > >> executor. > >> > > This is correct, with Executor filter ordering is not guaranteed. Do you > > need an executor filter there? > > It's usage is recommended if you have some intensive task in chain or in > > IoHandler. > > > > > >> Io->prorocol->authentication->executor->handler > >> > > This sound good. Alternative is to use OrderedThreadPoolExecutor, but go > > simple first. > > Implement stuff without Executor filter and then push that in if needed. > > > > > >> You cannot lock on out of order messaging without a queue and attempt to > >> re-order the messages. > >> On Aug 1, 2013 9:33 PM, "Hunter McMillen" <mcmil...@gmail.com> wrote: > >> > >>> Sorry, the code is probably more useful to see, here is the entry point > >>> to our application: > >>> > >>> acceptor = new NioSocketAcceptor( > >>> Runtime.getRuntime().availableProcessors() ); > >>> acceptor.getFilterChain().addLast("executor", new > >>> ExecutorFilter( Executors.newCachedThreadPool())); > >>> acceptor.getFilterChain().addLast("logger", > >>> MudConfig.Logging.getFilter()); > >>> acceptor.getFilterChain().addLast("codec", > >>> new ProtocolCodecFilter( > >>> new TextLineEncoder(), new CommandDecoder() > >>> ) > >>> ); > >>> > >>> More importantly, my main question is how I can link the DONE state of > >>> the state machine (AuthenticationHandler) and the IoHandlerAdapter. I > >>> can post the code for these also, I just didn't want to overload the > >>> thread. > >>> > >>> Thanks. > >>> Hunter > >>> On 8/1/13 5:47 PM, Jon wrote: > >>>> You are not using an executor filter right? You have to implement > >>> locking during the authentication phase if you are using thread > >> scheduling. > >>>> Sent from my iPhone > >>>> > >>>> On Aug 1, 2013, at 5:31 PM, Hunter McMillen <mcmil...@gmail.com> > >> wrote: > >>>>> Hello, > >>>>> > >>>>> I recently started working on a project with a friend that is a > >>> text-based game. We were having trouble with ReadFuture's when trying > to > >>> get a username/password combination from the user so we decided to > follow > >>> the state machine example from Tapedeck TCP server on Mina's homepage: > >>> > >> > http://mina.apache.org/mina-project/xref/org/apache/mina/example/tapedeck/ > >>>>> I have gotten the state machine to a point where it seems to be > >> working > >>> well. It starts, reads a username, then a password, then has some logic > >> to > >>> restart based on error; or it prints a message 'Authenticated'. > >>>>> However our main application logic is going to be (our plan at least) > >>> held in an IoHandlerAdapter, my question is what is a good way to > >> integrate > >>> the two of these: > >>>>> 1) The state machine authentication filter from the example above > >>>>> 2) An IoHandlerAdapter that will track information about connected > >>> users and sessions > >>>>> My confusion mainly lies in how to transition between the state > >> machine > >>> and the IoHandlerAdapter since they both respond to /sessionCreated > /and > >>> /sessionOpened /events. > >>>>> Any help, ideas, or input would be appreciated. > >>>>> > >>>>> Thanks. > >>>>> Hunter > >>> > > > > > >