From 997bced8e5e1577aff0696f769a58f9e176ea8b3 Mon Sep 17 00:00:00 2001 From: sbosse Date: Mon, 21 Jul 2025 23:13:56 +0200 Subject: [PATCH] Mon 21 Jul 22:43:21 CEST 2025 --- js/demo/UDP_Broker.js | 61 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 js/demo/UDP_Broker.js 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