diff --git a/js/demo/UDP_Broker.js b/js/demo/UDP_Broker.js new file mode 100644 index 0000000..aab7c65 --- /dev/null +++ b/js/demo/UDP_Broker.js @@ -0,0 +1,61 @@ +// UDP Hole Punching; Rendevouz Broker +// usage UDP_Broker + +var dgram = require('dgram'); + +var udp = dgram.createSocket('udp4'); +var udp_port = 10001; + +var clients = {}; + +udp.on('listening', function() { + var address = udp.address(); + console.log('# listening [%s:%s]', address.address, address.port); +}); + +udp.on('message', function(data, rinfo) { + try { + data = JSON.parse(data); + } catch (e) { + return console.log('! Couldn\'t parse data (%s):\n%s', e, data); + } + if (data.type == 'register') { + clients[data.name] = { + name: data.name, + connections: { + local: data.linfo, + public: rinfo + } + }; + console.log('# Client registered: P %s@[%s:%s | L %s:%s]', data.name, + rinfo.address, rinfo.port, data.linfo.address, data.linfo.port); + send(rinfo.address,rinfo.port,{type:'cack',from:'BROKER'}); + } else if (data.type == 'connect') { + var couple = [ clients[data.from], clients[data.to] ] + for (var i=0; i