@Override protected void clientShutdown() { if (connector != null) { connector.dispose(); } }
/** * Determines if this instance is currently in a state where it is actively serving connections. * * @return false when this instance is started and is currently being used to serve connections (otherwise true) */ @Override public synchronized boolean isIdle() { return this.socketAcceptor != null && this.socketAcceptor.getManagedSessionCount() == 0; }
/** * Stops this acceptor by unbinding the socket acceptor. Does nothing when the instance is not started. */ @Override public synchronized void stop() { if ( socketAcceptor != null ) { socketAcceptor.unbind(); socketAcceptor = null; } }
private static NioSocketAcceptor buildSocketAcceptor() { // Create SocketAcceptor with correct number of processors final int processorCount = JiveGlobals.getIntProperty( "xmpp.processor.count", Runtime.getRuntime().availableProcessors() ); final NioSocketAcceptor socketAcceptor = new NioSocketAcceptor( processorCount ); // Set that it will be possible to bind a socket if there is a connection in the timeout state. socketAcceptor.setReuseAddress( true ); // Set the listen backlog (queue) length. Default is 50. socketAcceptor.setBacklog( JiveGlobals.getIntProperty( "xmpp.socket.backlog", 50 ) ); // Set default (low level) settings for new socket connections final SocketSessionConfig socketSessionConfig = socketAcceptor.getSessionConfig(); //socketSessionConfig.setKeepAlive(); final int receiveBuffer = JiveGlobals.getIntProperty( "xmpp.socket.buffer.receive", -1 ); if ( receiveBuffer > 0 ) { socketSessionConfig.setReceiveBufferSize( receiveBuffer ); } final int sendBuffer = JiveGlobals.getIntProperty( "xmpp.socket.buffer.send", -1 ); if ( sendBuffer > 0 ) { socketSessionConfig.setSendBufferSize( sendBuffer ); } final int linger = JiveGlobals.getIntProperty( "xmpp.socket.linger", -1 ); if ( linger > 0 ) { socketSessionConfig.setSoLinger( linger ); } socketSessionConfig.setTcpNoDelay( JiveGlobals.getBooleanProperty( "xmpp.socket.tcp-nodelay", socketSessionConfig.isTcpNoDelay() ) ); return socketAcceptor; }
@Override protected void doOpen() throws Throwable { connectorKey = getUrl().toFullString(); SocketConnector c = connectors.get(connectorKey); if (c != null) { connector = c; } else { // set thread pool. connector = new SocketConnector(Constants.DEFAULT_IO_THREADS, Executors.newCachedThreadPool(new NamedThreadFactory("MinaClientWorker", true))); // config SocketConnectorConfig cfg = (SocketConnectorConfig) connector.getDefaultConfig(); cfg.setThreadModel(ThreadModel.MANUAL); cfg.getSessionConfig().setTcpNoDelay(true); cfg.getSessionConfig().setKeepAlive(true); int timeout = getConnectTimeout(); cfg.setConnectTimeout(timeout < 1000 ? 1 : timeout / 1000); // set codec. connector.getFilterChain().addLast("codec", new ProtocolCodecFilter(new MinaCodecAdapter(getCodec(), getUrl(), this))); connectors.put(connectorKey, connector); } }
@Override protected void doOpen() throws Throwable { // set thread pool. acceptor = new SocketAcceptor(getUrl().getPositiveParameter(Constants.IO_THREADS_KEY, Constants.DEFAULT_IO_THREADS), Executors.newCachedThreadPool(new NamedThreadFactory("MinaServerWorker", true))); // config SocketAcceptorConfig cfg = acceptor.getDefaultConfig(); cfg.setThreadModel(ThreadModel.MANUAL); // set codec. acceptor.getFilterChain().addLast("codec", new ProtocolCodecFilter(new MinaCodecAdapter(getCodec(), getUrl(), this))); acceptor.bind(getBindAddress(), new MinaHandler(getUrl(), this)); }
@Override protected ChannelFuture connect(SocketAddress socketAddress) { ConnectFuture connectFuture = connector.connect(socketAddress); return new MinaChannelFuture(connectFuture); } }
@Override public Collection<Channel> getChannels() { Set<IoSession> sessions = acceptor.getManagedSessions(getBindAddress()); Collection<Channel> channels = new HashSet<Channel>(); for (IoSession session : sessions) { if (session.isConnected()) { channels.add(MinaChannel.getOrAddChannel(session, getUrl(), this)); } } return channels; }
@Override protected void doClose() throws Throwable { try { if (acceptor != null) { acceptor.unbind(getBindAddress()); } } catch (Throwable e) { logger.warn(e.getMessage(), e); } }
@Override public boolean isBound() { return acceptor.isManaged(getBindAddress()); }
@Override protected void doOpen() throws Throwable { connectorKey = getUrl().toFullString(); SocketConnector c = connectors.get(connectorKey); if (c != null) { connector = c; } else { // set thread pool. connector = new SocketConnector(Constants.DEFAULT_IO_THREADS, Executors.newCachedThreadPool(new NamedThreadFactory("MinaClientWorker", true))); // config SocketConnectorConfig cfg = (SocketConnectorConfig) connector.getDefaultConfig(); cfg.setThreadModel(ThreadModel.MANUAL); cfg.getSessionConfig().setTcpNoDelay(true); cfg.getSessionConfig().setKeepAlive(true); int timeout = getConnectTimeout(); cfg.setConnectTimeout(timeout < 1000 ? 1 : timeout / 1000); // set codec. connector.getFilterChain().addLast("codec", new ProtocolCodecFilter(new MinaCodecAdapter(getCodec(), getUrl(), this))); connectors.put(connectorKey, connector); } }
@Override protected void doOpen() throws Throwable { // set thread pool. acceptor = new SocketAcceptor(getUrl().getPositiveParameter(Constants.IO_THREADS_KEY, Constants.DEFAULT_IO_THREADS), Executors.newCachedThreadPool(new NamedThreadFactory("MinaServerWorker", true))); // config SocketAcceptorConfig cfg = acceptor.getDefaultConfig(); cfg.setThreadModel(ThreadModel.MANUAL); // set codec. acceptor.getFilterChain().addLast("codec", new ProtocolCodecFilter(new MinaCodecAdapter(getCodec(), getUrl(), this))); acceptor.bind(getBindAddress(), new MinaHandler(getUrl(), this)); }
@Override protected ChannelFuture connect(SocketAddress socketAddress) { ConnectFuture connectFuture = connector.connect(socketAddress); return new MinaChannelFuture(connectFuture); } }
@Override public Collection<Channel> getChannels() { Set<IoSession> sessions = acceptor.getManagedSessions(getBindAddress()); Collection<Channel> channels = new HashSet<Channel>(); for (IoSession session : sessions) { if (session.isConnected()) { channels.add(MinaChannel.getOrAddChannel(session, getUrl(), this)); } } return channels; }
@Override protected void clientShutdown() { if (connector != null) { connector.dispose(); } }
@Override protected void doClose() throws Throwable { try { if (acceptor != null) { acceptor.unbind(getBindAddress()); } } catch (Throwable e) { logger.warn(e.getMessage(), e); } }
@Override public boolean isBound() { return acceptor.isManaged(getBindAddress()); }
@Override public Channel getChannel(InetSocketAddress remoteAddress) { Set<IoSession> sessions = acceptor.getManagedSessions(getBindAddress()); for (IoSession session : sessions) { if (session.getRemoteAddress().equals(remoteAddress)) { return MinaChannel.getOrAddChannel(session, getUrl(), this); } } return null; }
@Override public Channel getChannel(InetSocketAddress remoteAddress) { Set<IoSession> sessions = acceptor.getManagedSessions(getBindAddress()); for (IoSession session : sessions) { if (session.getRemoteAddress().equals(remoteAddress)) { return MinaChannel.getOrAddChannel(session, getUrl(), this); } } return null; }