Basic resource handling server with Californium/Java
This commit is contained in:
parent
e41959fefa
commit
573bad0fb2
@ -1,42 +1,50 @@
|
||||
package netpp;
|
||||
|
||||
import java.io.*;
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.InputStream;
|
||||
import java.net.URI;
|
||||
import java.util.Date;
|
||||
|
||||
import javax.json.*;
|
||||
import org.eclipse.californium.core.*;
|
||||
import javax.json.Json;
|
||||
import javax.json.JsonArray;
|
||||
import javax.json.JsonObject;
|
||||
import javax.json.JsonReader;
|
||||
|
||||
import org.eclipse.californium.core.CoapHandler;
|
||||
import org.eclipse.californium.core.CoapResponse;
|
||||
|
||||
public class Handler implements CoapHandler {
|
||||
|
||||
private URI uri;
|
||||
private Resource resource;
|
||||
|
||||
public Handler(URI uri) {
|
||||
public Handler(URI uri, Resource resource) {
|
||||
this.uri = uri;
|
||||
this.resource = resource;
|
||||
System.err.println("[D] new handler for " + this.uri);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLoad(CoapResponse response) {
|
||||
String content = response.getResponseText();
|
||||
// System.out.println("[D] resource: " + uri);
|
||||
// System.out.println(" new value: " + content);
|
||||
System.out.println("update" + new Date());
|
||||
System.out.println("[D] from " + this.uri + " update received at " + new Date() + " > " + content);
|
||||
|
||||
JsonArray jsonSenML = null;
|
||||
try {
|
||||
InputStream is = new ByteArrayInputStream(content.getBytes());
|
||||
System.out.println("0");
|
||||
JsonReader reader = Json.createReader(is);
|
||||
System.err.println("1: " + content);
|
||||
jsonSenML = reader.readArray();
|
||||
System.out.println("2");
|
||||
reader.close();
|
||||
|
||||
System.out.println("Java Json Object");
|
||||
System.out.println(jsonSenML.getJsonObject(0).getString("n"));
|
||||
System.out.println(jsonSenML.getJsonObject(0).getJsonNumber("v"));
|
||||
/* in this application, SenML contains only one resource -- see RFC8428 for further details */
|
||||
JsonObject res = jsonSenML.getJsonObject(0);
|
||||
String res_name = res.getString("n"); // name of resource
|
||||
int res_value = res.getJsonNumber("v").intValue(); // value of resource
|
||||
|
||||
resource.setName(res_name);
|
||||
resource.setValue(res_value);
|
||||
} catch (Exception ex) {
|
||||
ex.printStackTrace();
|
||||
System.err.println("[E] " + ex);
|
||||
}
|
||||
}
|
||||
|
@ -1,6 +1,8 @@
|
||||
package netpp;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.ArrayList;
|
||||
|
||||
import org.eclipse.californium.core.CoapServer;
|
||||
|
||||
public class Main {
|
||||
public final static String COOJA_MAGIC = "c30c";
|
||||
@ -31,9 +33,16 @@ public class Main {
|
||||
for (int i = 2; i <= n; i++) { // node 1 is the gateway, skip. And mind the <=
|
||||
String uri_string = "coap://[" + prefix + ":" + COOJA_MAGIC + "::" + Integer.toString(i, 16) + "]" + resource;
|
||||
System.err.println("[I] subscribing to " + uri_string);
|
||||
nodeList.add(new Node(uri_string));
|
||||
nodeList.add(new Node(i, uri_string));
|
||||
}
|
||||
|
||||
/* run server */
|
||||
CoapServer server = new CoapServer();
|
||||
for (Node node : nodeList) {
|
||||
server.add(node.getResource());
|
||||
}
|
||||
server.start();
|
||||
System.err.println("[D] server started");
|
||||
|
||||
/* thread sleep */
|
||||
try {
|
||||
|
@ -3,19 +3,25 @@ package netpp;
|
||||
import java.net.URI;
|
||||
import java.net.URISyntaxException;
|
||||
|
||||
import org.eclipse.californium.core.*;
|
||||
import org.eclipse.californium.core.CoapClient;
|
||||
import org.eclipse.californium.core.CoapObserveRelation;
|
||||
import org.eclipse.californium.core.CoapResource;
|
||||
|
||||
public class Node {
|
||||
private URI uri;
|
||||
private int quickname;
|
||||
private CoapClient client;
|
||||
private CoapObserveRelation relation;
|
||||
private Handler handler;
|
||||
Resource resource;
|
||||
|
||||
public Node(String uriString) {
|
||||
public Node(int quickname, String uriString) {
|
||||
try {
|
||||
this.uri = new URI(uriString);
|
||||
this.client = new CoapClient(uri);
|
||||
this.handler = new Handler(this.uri);
|
||||
this.quickname = quickname;
|
||||
this.resource = new Resource(this.quickname); /* this name will be overwritten when an update is received */
|
||||
this.handler = new Handler(this.uri, resource);
|
||||
this.relation = client.observe(handler);
|
||||
} catch (URISyntaxException e) {
|
||||
System.err.println("[F] Invalid URI: " + e.getMessage());
|
||||
@ -23,6 +29,10 @@ public class Node {
|
||||
}
|
||||
}
|
||||
|
||||
CoapResource getResource() {
|
||||
return this.resource;
|
||||
}
|
||||
|
||||
/* be kind with the poor resource constrained node */
|
||||
@Override
|
||||
public void finalize() {
|
||||
|
29
proxy/src/netpp/Resource.java
Normal file
29
proxy/src/netpp/Resource.java
Normal file
@ -0,0 +1,29 @@
|
||||
package netpp;
|
||||
|
||||
import org.eclipse.californium.core.CoapResource;
|
||||
import org.eclipse.californium.core.server.resources.CoapExchange;
|
||||
|
||||
public class Resource extends CoapResource {
|
||||
|
||||
private int value;
|
||||
|
||||
public Resource(int quickname) {
|
||||
super(Integer.toString(quickname, 16));
|
||||
// setObservable(true); // TODO -- do we need to make this observable?
|
||||
System.err.println("[D] resource created: " + super.getName());
|
||||
}
|
||||
|
||||
public void handleGET(CoapExchange exchange) {
|
||||
// TODO build the proper JSON object
|
||||
exchange.respond("TODO: " + this.getName() + " : " + this.getValue());
|
||||
}
|
||||
|
||||
public int getValue() {
|
||||
return this.value;
|
||||
}
|
||||
|
||||
public void setValue(int value) {
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue
Block a user