ndn-js
Version:
A JavaScript client library for Named Data Networking
107 lines (98 loc) • 3.62 kB
JavaScript
var addRoutePrefixUri;
var addRouteUri;
// Note: The transport and handler belong to the window since there is only
// one communication channel from the window to the Micro Forwarder.
var transport;
function onReceivedObject(obj) {
if (obj.type == "fib/list") {
var text = "FIB:<br/>\n";
for (var i = 0; i < obj.fib.length; ++i) {
text += " " + obj.fib[i].name + " nexthops=";
for (var j = 0; j < obj.fib[i].nextHops.length; ++j)
text += "{faceId=" + obj.fib[i].nextHops[j].faceId + "} ";
text += "<br/>\n";
}
document.getElementById('showStatusResult').innerHTML += text;
// Now show the faces.
transport.sendObject({ type: "faces/list" });
}
else if (obj.type == "faces/list") {
var text = "Faces:<br/>\n";
for (var i = 0; i < obj.faces.length; ++i)
text += " faceId=" + obj.faces[i].faceId +
" " + obj.faces[i].uri + "<br/>\n";
document.getElementById('showStatusResult').innerHTML += text;
}
else if (obj.type == "faces/query") {
if (obj.faceId != null) {
// We have the obj.faceId. Create the route.
transport.sendObject({
type: "rib/register",
nameUri: addRoutePrefixUri,
faceId: obj.faceId
});
}
else {
// The face doesn't exist yet. Create it.
transport.sendObject({
type: "faces/create",
uri: addRouteUri
});
}
}
else if (obj.type == "faces/create") {
var lowestErrorCode = 400;
if (obj.statusCode >= lowestErrorCode) {
console.log("faces/create error code " + obj.statusCode);
document.getElementById('showStatusResult').innerHTML =
"Error in faces/create. Error code " + obj.statusCode + ".<br/>\n";
}
else {
// We have the obj.faceId. Create the route.
transport.sendObject({
type: "rib/register",
nameUri: addRoutePrefixUri,
faceId: obj.faceId
});
}
}
else if (obj.type == "rib/register") {
var lowestErrorCode = 400;
if (obj.statusCode >= lowestErrorCode) {
console.log("rib/register error code " + obj.statusCode);
document.getElementById('showStatusResult').innerHTML =
"Error in rib/register. Error code " + obj.statusCode + ".<br/>\n";
}
else {
console.log("Registered " + addRoutePrefixUri + " to " + addRouteUri);
// Show the new route.
showStatus();
}
}
}
transport = new MicroForwarderTransport();
transport.setOnReceivedObject(onReceivedObject);
function addRoute() {
addRoutePrefixUri = document.getElementById("prefix").value;
var host = document.getElementById("uri").value;
addRouteUri = "ws://" + host + ":9696";
transport.sendObject({
type: "faces/query",
uri: addRouteUri
});
}
function showStatus() {
// Clear the results text. onReceivedObject will fill it.
document.getElementById('showStatusResult').innerHTML = "";
transport.sendObject({ type: "fib/list" });
}
document.addEventListener("DOMContentLoaded", function() {
var ssBtn = document.getElementById("showStatus");
ssBtn.addEventListener("click", function() {
showStatus();
});
var arBtn = document.getElementById("addRoute");
arBtn.addEventListener("click", function() {
addRoute();
});
});