From a0139317e8ad22f27b081ea185593ad98993799f Mon Sep 17 00:00:00 2001 From: "selva.andre" Date: Fri, 10 Aug 2012 19:17:24 +0200 Subject: [PATCH] Modified Server to gracefully terminate on stopServer --- .../java/org/dna/mqtt/moquette/server/Server.java | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/parser/src/main/java/org/dna/mqtt/moquette/server/Server.java b/parser/src/main/java/org/dna/mqtt/moquette/server/Server.java index e6b5b7d8..366bf421 100644 --- a/parser/src/main/java/org/dna/mqtt/moquette/server/Server.java +++ b/parser/src/main/java/org/dna/mqtt/moquette/server/Server.java @@ -4,6 +4,7 @@ import java.io.IOException; import java.net.InetSocketAddress; import org.apache.mina.core.service.IoAcceptor; import org.apache.mina.core.session.IdleStatus; +import org.apache.mina.core.session.IoSession; import org.apache.mina.filter.codec.ProtocolCodecFilter; import org.apache.mina.filter.codec.demux.DemuxingProtocolDecoder; import org.apache.mina.filter.codec.demux.DemuxingProtocolEncoder; @@ -53,7 +54,7 @@ public class Server { encoder.addMessageEncoder(PublishMessage.class, new PublishEncoder()); m_acceptor = new NioSocketAcceptor(); - + m_acceptor.getFilterChain().addLast( "logger", new MQTTLoggingFilter("SERVER LOG") ); m_acceptor.getFilterChain().addLast( "codec", new ProtocolCodecFilter(encoder, decoder)); @@ -65,6 +66,7 @@ public class Server { m_acceptor.setHandler(handler); + ((NioSocketAcceptor)m_acceptor).setReuseAddress(true); ((NioSocketAcceptor)m_acceptor).getSessionConfig().setReuseAddress(true); m_acceptor.getSessionConfig().setReadBufferSize( 2048 ); m_acceptor.getSessionConfig().setIdleTime( IdleStatus.BOTH_IDLE, DEFAULT_CONNECT_TIMEOUT ); @@ -81,8 +83,16 @@ public class Server { } protected void stopServer() { + LOG.info("Server stopping..."); + for(IoSession session: m_acceptor.getManagedSessions().values()) { + if(session.isConnected() && !session.isClosing()){ + session.close(false); + } + } + m_acceptor.unbind(); - LOG.info("Server unbinded"); + m_acceptor.dispose(); + LOG.info("Server stopped"); } }