UNPKG

ndn-js-contrib

Version:

Reusable 'Classes' for Named Data Networking: NameTree, PIT, FIB, ContentStore, Interfaces, and Transports

73 lines (59 loc) 2.19 kB
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;