improved the coap server example
Project: http://git-wip-us.apache.org/repos/asf/mina/repo Commit: http://git-wip-us.apache.org/repos/asf/mina/commit/ef6187ae Tree: http://git-wip-us.apache.org/repos/asf/mina/tree/ef6187ae Diff: http://git-wip-us.apache.org/repos/asf/mina/diff/ef6187ae Branch: refs/heads/trunk Commit: ef6187aed21a10f70c1948e10afc3427f89b39bc Parents: 59e8eaa Author: jvermillard <[email protected]> Authored: Sun May 26 22:45:35 2013 +0200 Committer: jvermillard <[email protected]> Committed: Sun May 26 22:45:35 2013 +0200 ---------------------------------------------------------------------- .../mina/coap/resource/ResourceRegistry.java | 2 +- .../apache/mina/examples/coap/CoapGetServer.java | 88 +++++--------- 2 files changed, 33 insertions(+), 57 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/mina/blob/ef6187ae/coap/src/main/java/org/apache/mina/coap/resource/ResourceRegistry.java ---------------------------------------------------------------------- diff --git a/coap/src/main/java/org/apache/mina/coap/resource/ResourceRegistry.java b/coap/src/main/java/org/apache/mina/coap/resource/ResourceRegistry.java index 5e74da0..164691f 100644 --- a/coap/src/main/java/org/apache/mina/coap/resource/ResourceRegistry.java +++ b/coap/src/main/java/org/apache/mina/coap/resource/ResourceRegistry.java @@ -49,7 +49,7 @@ public class ResourceRegistry { if (urlBuilder.length() > 0) { urlBuilder.append("/"); } - urlBuilder.append(opt.getData()); + urlBuilder.append(new String(opt.getData())); } } http://git-wip-us.apache.org/repos/asf/mina/blob/ef6187ae/examples/src/main/java/org/apache/mina/examples/coap/CoapGetServer.java ---------------------------------------------------------------------- diff --git a/examples/src/main/java/org/apache/mina/examples/coap/CoapGetServer.java b/examples/src/main/java/org/apache/mina/examples/coap/CoapGetServer.java index b8300e4..c968f91 100644 --- a/examples/src/main/java/org/apache/mina/examples/coap/CoapGetServer.java +++ b/examples/src/main/java/org/apache/mina/examples/coap/CoapGetServer.java @@ -19,6 +19,7 @@ */ package org.apache.mina.examples.coap; +import java.io.IOException; import java.nio.ByteBuffer; import org.apache.mina.api.AbstractIoHandler; @@ -28,92 +29,67 @@ import org.apache.mina.coap.CoapCode; import org.apache.mina.coap.CoapMessage; import org.apache.mina.coap.CoapOption; import org.apache.mina.coap.CoapOptionType; -import org.apache.mina.coap.MessageType; import org.apache.mina.coap.codec.CoapDecoder; import org.apache.mina.coap.codec.CoapEncoder; +import org.apache.mina.coap.resource.AbstractResourceHandler; +import org.apache.mina.coap.resource.CoapResponse; +import org.apache.mina.coap.resource.ResourceRegistry; import org.apache.mina.filter.codec.ProtocolCodecFilter; -import org.apache.mina.transport.nio.NioUdpServer; +import org.apache.mina.transport.bio.BioUdpServer; /** - * A simple CoAP UDP server answering to GET requests + * A CoAP UDP server serving some resources. * * @author <a href="http://mina.apache.org">Apache MINA Project</a> */ public class CoapGetServer { public static void main(String[] args) { - NioUdpServer server = new NioUdpServer(); - server.getSessionConfig().setIdleTimeInMillis(IdleStatus.READ_IDLE, 20000); - server.setFilters(new ProtocolCodecFilter<CoapMessage, ByteBuffer, Void, Void>(new CoapEncoder(), - new CoapDecoder())); - server.setIoHandler(new AbstractIoHandler() { - @Override - public void sessionOpened(IoSession session) { - System.err.println("open " + session); + // create a CoAP resource registry + final ResourceRegistry reg = new ResourceRegistry(); - } + reg.register(new AbstractResourceHandler() { @Override - public void sessionIdle(IoSession session, IdleStatus status) { - System.err.println("idle " + session); - session.close(false); + public String getPath() { + return "demo"; } @Override - public void sessionClosed(IoSession session) { - System.err.println("closed"); + public CoapResponse handle(CoapMessage request) { + return new CoapResponse(CoapCode.CONTENT.getCode(), "niah niah niah niah niah\n niah niah niah\n" + .getBytes(), new CoapOption(CoapOptionType.CONTENT_FORMAT, new byte[] { 0 })); } @Override - public void messageSent(IoSession session, Object message) { - System.err.println("sent " + message + " to " + session); - + public String getTittle() { + return "Some demo resource"; } + }); + BioUdpServer server = new BioUdpServer(); + server.setFilters(new ProtocolCodecFilter<CoapMessage, ByteBuffer, Void, Void>(new CoapEncoder(), + new CoapDecoder())); + server.getSessionConfig().setIdleTimeInMillis(IdleStatus.READ_IDLE, 20000); + server.setIoHandler(new AbstractIoHandler() { @Override public void messageReceived(IoSession session, Object message) { - System.err.println("receive " + message + " from " + session); - CoapMessage msg = (CoapMessage) message; - if (msg.getType() == MessageType.CONFIRMABLE && CoapCode.fromCode(msg.getCode()) == CoapCode.GET) { - // it's a get! - - // find the URI - String url = null; - for (CoapOption opt : msg.getOptions()) { - if (opt.getType() == CoapOptionType.URI_PATH) { - url = new String(opt.getData()); - } - } - - System.err.println("GET on path : " + url); - - // let's confirm it - CoapMessage response = new CoapMessage(1, MessageType.ACK, CoapCode.CONTENT.getCode(), msg.getId(), - msg.getToken(), new CoapOption[] { new CoapOption(CoapOptionType.CONTENT_FORMAT, - new byte[] { 0 }) }, "hello coap !".getBytes()); - session.write(response); - System.err.println("closing"); - // session.close(false); - System.err.println("done!"); - } - } - - @Override - public void exceptionCaught(IoSession session, Exception cause) { - System.err.println("exception : "); - cause.printStackTrace(); - session.close(false); + System.err.println("rcv : " + message); + CoapMessage resp = reg.respond((CoapMessage) message); + System.err.println("resp : " + resp); + session.write(resp); } }); try { server.bind(5683); - - Thread.sleep(60000); - - server.unbind(); - } catch (Exception e) { + for (;;) { + Thread.sleep(1000); + } + } catch (IOException e) { + e.printStackTrace(); + } catch (InterruptedException e) { e.printStackTrace(); } }
