// 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