Skip to content

Commit

Permalink
Improve robot disovery in noisy Wi-Fi
Browse files Browse the repository at this point in the history
UDP is lossy, so send multiple broadcast packets until
we receive a response from the robot.
  • Loading branch information
Wayne Lee committed Sep 15, 2017
1 parent 563be00 commit 2fd28e0
Showing 1 changed file with 17 additions and 3 deletions.
20 changes: 17 additions & 3 deletions lib/discovery.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,17 +4,33 @@ const dgram = require('dgram');

function discovery (cb, full) {
const server = dgram.createSocket('udp4');
let robotFound = false;
let broadcastInterval;

function sendBroadcast() {
const message = new Buffer('irobotmcs');
server.setBroadcast(true);

for (let i = 0; i < 3; i++) {
server.send(message, 0, message.length, 5678, '255.255.255.255');
}
}

server.on('error', (err) => {
server.close();
cb(err);
});

server.on('message', (msg) => {
if (robotFound) {
return;
}
try {
let parsedMsg = JSON.parse(msg);
if (parsedMsg.hostname && parsedMsg.ip && parsedMsg.hostname.split('-')[0] === 'Roomba') {
server.close();
robotFound = true;
clearInterval(broadcastInterval);
console.log('Robot found! with blid/username: ' + parsedMsg.hostname.split('-')[1]);
console.log(parsedMsg);
cb(null, full ? parsedMsg : parsedMsg.ip);
Expand All @@ -27,9 +43,7 @@ function discovery (cb, full) {
});

server.bind(5678, function () {
const message = new Buffer('irobotmcs');
server.setBroadcast(true);
server.send(message, 0, message.length, 5678, '255.255.255.255');
broadcastInterval = setInterval(() => sendBroadcast(), 5000);
});
}

Expand Down

0 comments on commit 2fd28e0

Please sign in to comment.