UNPKG

ndn-js-contrib

Version:

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

117 lines (98 loc) 3.58 kB
var Peer = require("peerjs") , Face = require("../Face.js") , DataConnectionTransport = require("./DataConnectionTransport.js") , WebSocketTransport = require("./WebSocketBrowserTransport.js") , WebSocket; require("./chrome-websocket.js"); window.Peer = Peer; function Node_peer_listen (params){ var self = this; return new Promise(function Node_listen_Promise(resolve, reject){ if(params.protocol === "webrtc"){ var options = { host : params.host || location.hostname , port : params.port || 8787 , path : params.path || "/" , config : params.config } var peer = new Peer(self._id,options); peer.on('connection', function onClientPeerConnection(dataConnection){ var face; console.log("incoming peerconnection") Face.Create(new DataConnectionTransport({ dataConnection : dataConnection , peer : peer }), function ClientPeerConnectionFace_onReceivedElement(element){ self.onReceivedElement(element, face); }) .then(function onClientFace(fac){ face = fac; self.onFace(fac) .then(function(){ self.onPeer(face, dataConnection.metadata); }); }); }); self._servers.push(peer); peer.on('open', function onPeerServerConnected(id){ console.log("peer Open") resolve(id) }) } else if (params.protocol === "websocket"){ console.log("try listen websocket", window.http) console.log("window.WebSocketServer") params.port = params.port || 8686; params.host = params.host || "0.0.0.0"; if (http.Server && http.WebSocketServer) { // Listen for HTTP connections. console.log("listen websocket") var server = new http.Server(); var wsServer = new http.WebSocketServer(server); server.listen(params.port); console.log(server, wsServer) wsServer.addEventListener('request', function(req) { console.log('Client connected'); var socket = req.accept(); console.log("socket", socket) socket.addEventListener("message", function(evt){ console.log("got message", evt) if (evt.data instanceof ArrayBuffer ) evt.currentTarget = { binaryType: "arraybuffer" } else evt.currentTarget = { binaryType: "ignore" } socket.onmessage(evt) }) socket.addEventListener("close", function(evt){ socket.onclose(evt); }) socket.addEventListener("error", function(evt){ socket.onerror(evt) }) console.log("socket", socket) socket.readyState = 1; Face.Create(new WebSocketTransport(socket), function ws_client_Face_onReceivedElement(element){ self.onReceivedElement(element, face); }) .then(function onClientFace(face){ console.log("face created"); self.onFace(face) .then(function(){ self.onPeer(face); }); }); return true; }); self._servers.push(wsServer); resolve(params.host + ":" + params.port); } } else { reject(new Error("Unsupported Options")) } }) } window.listen = Node_peer_listen; module.exports = Node_peer_listen;