That is basically how it is done. Io->packet processor->state machine->handler
The state machine should only handle one packet at a time. In the message received just do... If ( authenticated ) Next filter.message received( msg ) Else Etc On Aug 7, 2013 3:22 PM, "Hunter McMillen" <[email protected]> wrote: > So that is actually the solution we had before, but the state machine was > in an authentication filter, we had a lot of trouble transitioning from "ok > now I am done authenticating, I want to be in my IoHandler now" > > Hunter > On 8/7/2013 3:03 PM, Jon wrote: > >> So just implement some sort if authentication using the state machine and >> a database record lookup. >> >> Sent from my iPhone >> >> On Aug 7, 2013, at 2:11 PM, Hunter McMillen <[email protected]> wrote: >> >> I misunderstood what you were asking, yes we have an abstract Command >>> class that has derivatives for all of the commands that a user could enter. >>> >>> Hunter >>> On 8/7/2013 1:13 PM, Jon wrote: >>> >>>> You must be building some sort of communication format for it. >>>> >>>> Sent from my iPhone >>>> >>>> On Aug 7, 2013, at 1:06 PM, Hunter McMillen <[email protected]> wrote: >>>> >>>> We're not really implementing a protocol, we are just trying to make a >>>>> text-based game that will seamlessly support hundreds to thousands of >>>>> users >>>>> at a time. >>>>> >>>>> Hunter >>>>> On 8/7/2013 12:02 PM, Jon wrote: >>>>> >>>>>> This is more of a protocol implementation than a networking question. >>>>>> What kind of protocol are you implementing. >>>>>> >>>>>> Sent from my iPhone >>>>>> >>>>>> On Aug 7, 2013, at 11:34 AM, Hunter McMillen <[email protected]> >>>>>> wrote: >>>>>> >>>>>> We actually won't need anything as complex as LDAP, just a simple DB >>>>>>> hash + salt lookup. >>>>>>> >>>>>>> Hunter >>>>>>> On 8/7/2013 10:26 AM, Emmanuel Lécharny wrote: >>>>>>> >>>>>>>> Le 8/7/13 4:11 PM, Hunter McMillen a écrit : >>>>>>>> >>>>>>>>> What are the common ways to authenticate users using Mina? >>>>>>>>> >>>>>>>>> The first attempt I made was using a state machine, but I had >>>>>>>>> problems >>>>>>>>> integrating that with an IoHandler. >>>>>>>>> >>>>>>>>> In retrospect, the state machine seems like overkill; so I was >>>>>>>>> hoping >>>>>>>>> to get ideas for other ways to authenticate users, or maybe a link >>>>>>>>> to >>>>>>>>> an application that does some authentication. >>>>>>>>> >>>>>>>>> would it be terrible to do something like this? >>>>>>>>> >>>>>>>>> public void sessionCreated(IoSession session) { >>>>>>>>> authenticateUser() // < ----- Good idea? Bad Idea? Run in a >>>>>>>>> separate thread? >>>>>>>>> } >>>>>>>>> >>>>>>>> Depends... >>>>>>>> >>>>>>>> let's see how it works with LDAP : >>>>>>>> >>>>>>>> - the user can connect on the server (and the sessionCreated event >>>>>>>> is >>>>>>>> handled), but the user will not be authentified at this point. >>>>>>>> >>>>>>>> - in order to authenticate the user, we need to know about the user. >>>>>>>> Just having his IP address is certainly not good enough (it's easy >>>>>>>> to >>>>>>>> spoof it), so we expect the client to sent some credentials in the >>>>>>>> first >>>>>>>> dedicated message. In LDAP this is done through a BindRequest. >>>>>>>> Anyway, >>>>>>>> as you require the user to send you some data, you have to process >>>>>>>> them >>>>>>>> by handling the messageReceived event. >>>>>>>> >>>>>>>> >>>>>>>> Last, not least : what about a separate thread ? >>>>>>>> >>>>>>>> That's a good question. The answer, again is "it depends". If it >>>>>>>> takes >>>>>>>> seconds to authenticat a user, because you have to send the auth >>>>>>>> request >>>>>>>> to a remote server, then having a separate thread for that sounds >>>>>>>> smart. >>>>>>>> Most of the time, the authent will take a few ms, and will be done >>>>>>>> quite >>>>>>>> rarely, so it's enough to execute this code in the same thread. >>>>>>>> >>>>>>>> Hope it helps. >>>>>>>> >>>>>>> >
