Example usage for org.apache.mina.api IoFilter IoFilter

List of usage examples for org.apache.mina.api IoFilter IoFilter

Introduction

In this page you can find the example usage for org.apache.mina.api IoFilter IoFilter.

Prototype

IoFilter

Source Link

Usage

From source file:BuggyServer.java

License:Apache License

public static void main(String[] args) throws Exception {
    PropertyConfigurator.configure("log4j.properties");

    LOG.info("starting echo server");

    OneThreadSelectorStrategy strategy = new OneThreadSelectorStrategy(
            new SelectorFactory(NioSelectorProcessor.class));
    NioTcpServer acceptor = new NioTcpServer(strategy);

    // create the fitler chain for this service
    acceptor.setFilters(new LoggingFilter("LoggingFilter1"), new IoFilter() {

        @Override/*from   ww  w.j a v a2s  .co  m*/
        public void sessionOpened(IoSession session) {
            LOG.info("session {} open", session);
        }

        @Override
        public void sessionIdle(IoSession session, IdleStatus status) {
            LOG.info("session {} idle", session);
        }

        @Override
        public void sessionCreated(IoSession session) {
            LOG.info("session {} created", session);
        }

        @Override
        public void sessionClosed(IoSession session) {
            LOG.info("session {} open", session);
        }

        @Override
        public void messageWriting(IoSession session, Object message, WriteFilterChainController controller) {
            // we just push the message in the chain
            controller.callWriteNextFilter(session, message);
        }

        @Override
        public void messageReceived(IoSession session, Object message, ReadFilterChainController controller) {

            if (message instanceof ByteBuffer) {
                LOG.info("echoing");
                session.write(message);
            }
        }
    });

    acceptor.addListener(new IoServiceListener() {

        @Override
        public void sessionDestroyed(IoSession session) {
            LOG.info("session destroyed {}", session);

        }

        @Override
        public void sessionCreated(IoSession session) {
            LOG.info("session created {}", session);

            String welcomeStr = "welcome\n";
            ByteBuffer bf = ByteBuffer.allocate(welcomeStr.length());
            bf.put(welcomeStr.getBytes());
            bf.flip();
            session.write(bf);
        }

        @Override
        public void serviceInactivated(IoService service) {
            LOG.info("service deactivated {}", service);
        }

        @Override
        public void serviceActivated(IoService service) {
            LOG.info("service activated {}", service);
        }
    });

    startOfAll = System.currentTimeMillis();
    List<BindingThread> threads = new ArrayList<BindingThread>();
    for (int i = 9999; i < totalPorts + 9999; i++) {
        BindingThread bindingThread = new BindingThread(acceptor, i);
        threads.add(bindingThread);
        bindingThread.start();
    }

    Thread.sleep(500);
    acceptor.unbindAll();// the iterator in it must be in the synchronized block, but it is not in the sync block, so the concurrentModificationException happens.

    //               Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF8
    //               Exception in thread "main" java.util.ConcurrentModificationException
    //                  at java.util.HashMap$HashIterator.nextEntry(HashMap.java:894)
    //                  at java.util.HashMap$KeyIterator.next(HashMap.java:928)
    //                  at org.apache.mina.transport.tcp.nio.NioTcpServer.unbindAll(NioTcpServer.java:127)
    //                  at org.apache.mina.examples.echoserver.BuggyServer.main(BuggyServer.java:143)

    // join does not work for the binding thread as they wait for the incoming requests.

    //        try {
    //            SocketAddress address = new InetSocketAddress(9999);
    //            acceptor.bind(address);
    //            LOG.debug("Running the server for 25 sec");
    //            Thread.sleep(25000);
    //            LOG.debug("Unbinding the TCP port");
    //            acceptor.unbind(address);
    //        } catch (IOException e) {
    //            LOG.error("I/O exception", e);
    //        } catch (InterruptedException e) {
    //            LOG.error("Interrupted exception", e);
    //        }
}

From source file:performance.BuggyServer.java

License:Apache License

private static void setFiltersListeners(NioTcpServer acceptor) {

    // create the fitler chain for this service
    acceptor.setFilters(new LoggingFilter("LoggingFilter1"), new IoFilter() {

        @Override/* www .jav a 2  s.c om*/
        public void sessionOpened(IoSession session) {
            LOG.info("session {} open", session);
        }

        @Override
        public void sessionIdle(IoSession session, IdleStatus status) {
            LOG.info("session {} idle", session);
        }

        @Override
        public void sessionCreated(IoSession session) {
            LOG.info("session {} created", session);
        }

        @Override
        public void sessionClosed(IoSession session) {
            LOG.info("session {} open", session);
        }

        @Override
        public void messageWriting(IoSession session, Object message, WriteFilterChainController controller) {
            // we just push the message in the chain
            controller.callWriteNextFilter(session, message);
        }

        @Override
        public void messageReceived(IoSession session, Object message, ReadFilterChainController controller) {

            if (message instanceof ByteBuffer) {
                LOG.info("echoing");
                session.write(message);
            }
        }
    });

    acceptor.addListener(new IoServiceListener() {

        @Override
        public void sessionDestroyed(IoSession session) {
            LOG.info("session destroyed {}", session);

        }

        @Override
        public void sessionCreated(IoSession session) {
            LOG.info("session created {}", session);

            String welcomeStr = "welcome\n";
            ByteBuffer bf = ByteBuffer.allocate(welcomeStr.length());
            bf.put(welcomeStr.getBytes());
            bf.flip();
            session.write(bf);
        }

        @Override
        public void serviceInactivated(IoService service) {
            LOG.info("service deactivated {}", service);
        }

        @Override
        public void serviceActivated(IoService service) {
            LOG.info("service activated {}", service);
        }
    });

}