ndn-js-contrib
Version:
Reusable 'Classes' for Named Data Networking: NameTree, PIT, FIB, ContentStore, Interfaces, and Transports
73 lines (59 loc) • 2.19 kB
JavaScript
var WebSocketTransport = require("./WebSocketBrowserTransport")
, DataConnectionTransport = require("./DataConnectionTransport")
, Face = require("../Face.js")
, Peer = require("peerjs");
function Node_connect(remote, meta){
var self = this;
console.log("browser connect", remote);
var Transport;
if (remote.split(":")[0] === "webrtc"){
try{
var options = {
host: (~remote.split("://")[1].indexOf(".")) ? remote.split("://")[1].split("#")[0].split(":")[0] : location.hostname
, id: remote.split("#")[1]
, path: (~remote.split("://")[1].indexOf("/")) ? "/" + remote.split("://")[1].split("/")[1].split("#")[0] : "/"
, port: (~remote.split("://")[1].indexOf(":")) ? parseInt(remote.split("://")[1].split(":")[1].split("#")[0].split("/")[0]) : 8787
};
} catch(e){
return Promise.reject("malformed remote string")
}
if(!options.id)
return Promise.reject("must provide a string ending with #<remote-id>")
if (meta)
options.metadata = meta;
//console.log("peer connect", options)
var peer;
for (var i in this._servers){
peer = this._servers[i]
if(peer.options.host === options.host
&& peer.options.path === options.path
&& peer.options.port === options.port)
break;
else
peer = null;
}
peer = peer || new Peer(options);
if (peer.id === options.id)
return Promise.reject("dont connect to yourself")
options.peer = peer;
remote = options;
Transport = DataConnectionTransport;
}
else if (remote.split(":")[0] === "ws" || remote.split(":")[0] === "wss")
Transport = WebSocketTransport;
else
return Promise.reject("Node.connect: unsupported protocol");
var face
return Face.Create(new Transport(remote))
.then(function onClientFace(face){
console.log("onFace")
return Promise.all([
self.onFace(face)
, Promise.resolve(face)
]);
}).then(function onFaceReady(results){
console.log("ready")
return results.pop();
});
}
module.exports = Node_connect;