2019-11-07 21:34:13 +00:00
|
|
|
package netpp;
|
|
|
|
|
2019-11-08 22:18:09 +00:00
|
|
|
import java.util.ArrayList;
|
|
|
|
|
|
|
|
import org.eclipse.californium.core.CoapServer;
|
2019-11-08 20:55:43 +00:00
|
|
|
|
2019-11-07 21:34:13 +00:00
|
|
|
public class Main {
|
|
|
|
public final static String COOJA_MAGIC = "c30c";
|
2019-11-08 20:55:43 +00:00
|
|
|
public final static String resource = "/PreciousResource";
|
2019-11-07 21:34:13 +00:00
|
|
|
|
|
|
|
public static void main(String[] args) {
|
|
|
|
if (args.length < 2) {
|
|
|
|
System.err.println("[F] Bad parameters");
|
|
|
|
System.err.println("Usage: ");
|
|
|
|
System.err.println("$ exe <prefix> <n>");
|
|
|
|
System.err.println(" prefix IPv6 /64 prefix (mind the format!)");
|
2019-11-08 07:30:46 +00:00
|
|
|
System.err.println(" n last node number (dec)");
|
2019-11-07 21:34:13 +00:00
|
|
|
System.err.println();
|
|
|
|
System.err.println("Example:");
|
|
|
|
System.err.println("$ exe 2001:db8:0:0 10");
|
|
|
|
System.exit(1);
|
|
|
|
}
|
|
|
|
|
2019-11-08 20:55:43 +00:00
|
|
|
/* getting parameters from CLI */
|
2019-11-07 21:34:13 +00:00
|
|
|
final String prefix = args[0];
|
|
|
|
final int n = Integer.parseInt(args[1]);
|
2019-11-08 20:55:43 +00:00
|
|
|
|
2019-12-15 16:48:47 +00:00
|
|
|
/* run server */
|
|
|
|
CoapServer server = new CoapServer();
|
|
|
|
server.start();
|
|
|
|
System.err.println("[D] server started");
|
|
|
|
|
2019-11-08 20:55:43 +00:00
|
|
|
/* subscribe to every node specified */
|
2019-11-07 21:34:13 +00:00
|
|
|
System.err.println("[I] now subscribing to node [2; " + n + "] in " + prefix + "/64");
|
|
|
|
|
2019-11-08 20:55:43 +00:00
|
|
|
ArrayList<Node> nodeList = new ArrayList<Node>();
|
|
|
|
|
2019-11-07 21:34:13 +00:00
|
|
|
for (int i = 2; i <= n; i++) { // node 1 is the gateway, skip. And mind the <=
|
2019-11-08 07:30:46 +00:00
|
|
|
String uri_string = "coap://[" + prefix + ":" + COOJA_MAGIC + "::" + Integer.toString(i, 16) + "]" + resource;
|
2019-11-07 21:34:13 +00:00
|
|
|
System.err.println("[I] subscribing to " + uri_string);
|
2019-12-15 16:48:47 +00:00
|
|
|
|
|
|
|
Node node = new Node(i, uri_string);
|
|
|
|
nodeList.add(node);
|
2019-11-08 22:18:09 +00:00
|
|
|
server.add(node.getResource());
|
|
|
|
}
|
2019-11-07 21:34:13 +00:00
|
|
|
|
2019-12-15 16:48:47 +00:00
|
|
|
/* periodically check for offline nodes */
|
|
|
|
while (true) {
|
|
|
|
System.err.println("[D] check for offline nodes...");
|
|
|
|
Node offline_node = null;
|
|
|
|
|
|
|
|
for (Node node : nodeList) {
|
|
|
|
if (node.getStatus() == Status.OFFLINE) {
|
|
|
|
System.err.println("[I] detected offline node");
|
|
|
|
offline_node = node;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (offline_node != null) {
|
|
|
|
System.err.println("[I] tryng again to contact " + offline_node.getURI());
|
|
|
|
nodeList.remove(offline_node);
|
|
|
|
server.remove(offline_node.getResource());
|
|
|
|
|
|
|
|
Node new_node = new Node(0, offline_node.getURI().toString());
|
|
|
|
nodeList.add(new_node);
|
|
|
|
server.add(new_node.getResource());
|
|
|
|
}
|
|
|
|
/* thread sleep */
|
|
|
|
try {
|
|
|
|
Thread.sleep(5 * 1000); // 5 sec
|
|
|
|
} catch (InterruptedException ex) {
|
|
|
|
System.err.println(ex);
|
|
|
|
}
|
2019-11-08 20:55:43 +00:00
|
|
|
}
|
|
|
|
|
2019-11-07 21:34:13 +00:00
|
|
|
}
|
|
|
|
}
|