HTTP.js example with external in/out used

Connects server websocket by event to gun....  (would have complicated with alternative websocket interfaces and protocol handlings... but left some comments about that)
This commit is contained in:
d3x0r 2016-12-26 21:49:42 -08:00 committed by GitHub
parent db74549326
commit 85ae140512

View File

@ -0,0 +1,60 @@
var port = process.env.OPENSHIFT_NODEJS_PORT || process.env.VCAP_APP_PORT || process.env.PORT || process.argv[2] || 8080;
var Gun = require('../');
var gun = Gun({
file: 'data.json',
s3: {
key: '', // AWS Access Key
secret: '', // AWS Secret Token
bucket: '' // The bucket you want to save into
}
});
var server = require('http').createServer(function(req, res){
if(gun.wsp.server(req, res)){
return; // filters gun requests!
}
require('fs').createReadStream(require('path').join(__dirname, req.url)).on('error',function(){ // static files!
res.writeHead(200, {'Content-Type': 'text/html'});
res.end(require('fs').readFileSync(require('path').join(__dirname, 'index.html'))); // or default to index
}).pipe(res); // stream
});
// do not do this to attach server... instead pull websocket provider and use that.
// gun.wsp(server);
var ws = require( 'ws' ); // default websocket provider gun used...
var WebSocketServer = ws.server;
var wss = new WebSocketServer( {
server: server, // 'ws' npm
autoAcceptConnections : false // want to handle the request (websocket npm?)
}
wss.on('connection',acceptConnection )
var gunPeers = []; // used as a list of connected clients.
function acceptConnection( connection ) {
// connection.upgradeReq.headers['sec-websocket-protocol'] === (if present) protocol requested by client
// connection.upgradeReq.url === url request
console.log( "connect?", req.upgradeReq.headers, req.upgradeReq.url )
gunPeers.push( connection );
gun.on('out', (msg)=>{
msg = JSON.stringify({headers:{},body:msg});
gunPeers.forEach( (peer)=>{ peer.send( msg ) })
})
connection.on( 'error',(error)=>{console.log( "WebSocket Error:", error } );
connection.on( 'message',(msg)=>{gun.on('in',JSON.parse( msg.utf8Data).body)})
connection.on( 'close', (reason,desc)=>{
// gunpeers gone.
var i = peers.find( p=>p===connection );
if( i >= 0 )
gunPeers.splice( i, 1 );
})
}
server.listen(port);
console.log('Server started on port ' + port + ' with ');