ndn-js-contrib
Version:
Reusable 'Classes' for Named Data Networking: NameTree, PIT, FIB, ContentStore, Interfaces, and Transports
117 lines (98 loc) • 3.58 kB
JavaScript
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;