diff --git a/examples/http-external-ws.js b/examples/http-external-ws.js new file mode 100644 index 00000000..22d1d548 --- /dev/null +++ b/examples/http-external-ws.js @@ -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 ');