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