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();
         }
     }

Reply via email to