Example usage for org.apache.mina.api IoSession write

List of usage examples for org.apache.mina.api IoSession write

Introduction

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

Prototype

void write(Object message);

Source Link

Document

Enqueue a message for writing.

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  a 2s  .c  o 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:com.semion.demo.mina.NioEchoClient.java

License:Apache License

public static void main(String[] args) {
    LOG.info("starting echo client");

    final NioTcpClient client = new NioTcpClient();
    client.setFilters();/* w  ww .j ava2  s.c o  m*/
    client.setIoHandler(new AbstractIoHandler() {
        @Override
        public void sessionOpened(final IoSession session) {
            LOG.info("session opened {}", session);
        }

        @Override
        public void messageReceived(IoSession session, Object message) {
            LOG.info("message received {}", message);
            if (message instanceof ByteBuffer) {
                LOG.info("echoing");
                session.write(message);
            }
        }

        @Override
        public void messageSent(IoSession session, Object message) {
            LOG.info("message sent {}", message);
        }

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

    try {
        IoFuture<IoSession> future = client.connect(new InetSocketAddress("localhost", 9999));

        try {
            IoSession session = future.get();
            LOG.info("session connected : {}", session);
        } catch (ExecutionException e) {
            LOG.error("cannot connect : ", e);
        }

        LOG.debug("Running the client for 25 sec");
        Thread.sleep(25000);
    } catch (InterruptedException e) {
    }
}

From source file:com.semion.demo.mina.NioEchoServer.java

License:Apache License

public static void main(final String[] args) {
    LOG.info("starting echo server");

    final NioTcpServer acceptor = new NioTcpServer();

    // create the filter chain for this service
    acceptor.setFilters(new LoggingFilter("LoggingFilter1"));

    acceptor.setIoHandler(new AbstractIoHandler() {
        @Override/*from   w  w w.  j a  v  a2s  .  c o  m*/
        public void sessionOpened(final IoSession session) {
            LOG.info("session opened {}", session);

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

        @Override
        public void messageReceived(IoSession session, Object message) {
            if (message instanceof ByteBuffer) {
                LOG.info("echoing");
                session.write(message);
            }
        }
    });
    try {
        final 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();
    } catch (final InterruptedException e) {
        LOG.error("Interrupted exception", e);
    }
}

From source file:org.eclipse.mihini.coap.assetfactory.CoapServer.java

License:Apache License

public void start() {

    final Map<String, IoSession> registration = new ConcurrentHashMap<String, IoSession>();

    reg = new ResourceRegistry();

    BioUdpServer server = new BioUdpServer();
    final RequestFilter<CoapMessage, CoapMessage> rq = new RequestFilter<CoapMessage, CoapMessage>();

    server.setFilters(/* new LoggingFilter(), */new ProtocolCodecFilter<CoapMessage, ByteBuffer, Void, Void>(
            new CoapEncoder(), new CoapDecoder()), rq);
    // idle in 10 minute
    server.getSessionConfig().setIdleTimeInMillis(IdleStatus.READ_IDLE, 10 * 60 * 1000);
    server.setIoHandler(new AbstractIoHandler() {

        long start = System.currentTimeMillis();
        int count = 0;

        @Override/* ww w.ja  v a2  s  .c  o  m*/
        public void messageReceived(IoSession session, Object message) {
            System.err.println("rcv : " + message);

            CoapMessage resp = reg.respond((CoapMessage) message, session);
            System.err.println("resp : " + resp);
            session.write(resp);
            count++;
            if (count >= 100000) {
                System.err.println("time for 100k msg : " + (System.currentTimeMillis() - start));
                count = 0;
                start = System.currentTimeMillis();
            }
        }

        @Override
        public void messageSent(IoSession session, Object message) {
            System.err.println("sent : " + message);
        }

        @Override
        public void sessionIdle(IoSession session, IdleStatus status) {
            System.err.println("idle closing");
            session.close(false);
        }
    });

    try {
        server.bind(5683);
        new Thread() {
            @Override
            public void run() {
                for (;;) {
                    for (IoSession s : registration.values()) {
                        rq.request(s, CoapMessage.get("st", true), 15000)
                                .register(new AbstractIoFutureListener<CoapMessage>() {
                                    @Override
                                    public void completed(CoapMessage result) {
                                        System.err.println("status : " + result);
                                    }
                                });
                    }

                    try {
                        // let's poll every 10 seconds
                        Thread.sleep(10000);
                    } catch (InterruptedException e) {
                        break;
                    }
                }
            }
        }.start();

        for (;;) {
            Thread.sleep(1000);
        }
    } catch (InterruptedException e) {
        e.printStackTrace();
    }

}

From source file:org.geb.core.transport.tcp.mina.MinaTcpServer.java

@Override
public void write(final Message message, final String destPeerID) throws UnknownClientException {
    Objects.requireNonNull(message);
    Objects.requireNonNull(destPeerID);

    final Long sessionID = findSessionID(destPeerID);
    if (sessionID == null) {
        LOG.log(Level.INFO, "No such client: {0}", destPeerID);

        throw new UnknownClientException("No such client: " + destPeerID);
    }// w w w  .j  av a 2  s . c  o m

    final IoSession session = ioServer.getManagedSessions().get(sessionID);
    if (session == null) {
        LOG.log(Level.WARNING, "No such session: {0}", sessionID);

        throw new UnknownClientException("No such session: " + sessionID + " for client: " + destPeerID);
    }

    session.write(new CommonMessage(message));
}

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//  w w w  .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);
        }
    });

}