Example usage for org.apache.mina.transport.bio BioUdpServer setIoHandler

List of usage examples for org.apache.mina.transport.bio BioUdpServer setIoHandler

Introduction

In this page you can find the example usage for org.apache.mina.transport.bio BioUdpServer setIoHandler.

Prototype

@Override
public void setIoHandler(final IoHandler handler) 

Source Link

Usage

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//from w ww .j a va2  s  .  co 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();
    }

}