Hi,

I'm trying to code a server with Mina State Machine :

main :
           ...
           SocketAcceptor acceptor = new NioSocketAcceptor(nb_cpu);

           //DefaultIoFilterChainBuilder chain = acceptor.getFilterChain();

           // Add SSL filter if SSL is enabled.
           if (USE_SSL) {
               addSSLSupport2(acceptor);
           }

           acceptor.getFilterChain().addLast("protocolFilter",new
ProtocolCodecFilter(new OSSibServerProtocolCodecFactory()));
           acceptor.getFilterChain().addLast("logger", new LoggingFilter());
           acceptor.setHandler(createIoHandler());
           acceptor.setDefaultLocalAddress(new InetSocketAddress(port));
           acceptor.setReuseAddress(true);
           acceptor.bind();
           ...

}

   private IoHandler createIoHandler() {

       StateMachine sm =
StateMachineFactory.getInstance(IoHandlerTransition.class).create(ArchivageServer.DEMANDE_ARCHIVAGE,new
ArchivageServer());

       return new StateMachineProxyBuilder().setStateContextLookup(
               new IoSessionStateContextLookup(new StateContextFactory() {
                   public StateContext create() {
                       return new ArchivageContext();
                   }
               })).create(IoHandler.class, sm);
   }

My ArchivageServer class is :

public class ArchivageServer {

   /** Creation du logger */

   private final static Logger LOGGER =
Logger.getLogger(ArchivageServer.class);

   @State public static final String ROOT = "Root";
   @State(ROOT) public static final String DEMANDE_ARCHIVAGE =
"DEMANDE_ARCHIVAGE";

   static class ArchivageContext extends AbstractStateContext {}

   @IoHandlerTransitions({

       @IoHandlerTransition(on = MESSAGE_RECEIVED, in =
DEMANDE_ARCHIVAGE, next = STATUT_117),

       @IoHandlerTransition(on = MESSAGE_RECEIVED, in = END, next =
STATUT_117)

   })

   public void connect(IoSession session,OSSibRequestMessage message) {
           LOGGER.info("I'm object number "+this.hashCode()+"
session:"+session.getId());
   }

My problem is : if 2 client connect, this.hashCode have the same value for
the 2 different sessions. I would like to have as many ArchivageServer
object as session. How can i modify my program ?

Thanks

Pierre

Reply via email to