discover-chromecasts
Version:
Discover/detect all Chromecast devices on a network.
65 lines (52 loc) • 1.3 kB
JavaScript
;
const mdns = require("multicast-dns");
const pify = require("pify");
function discoverChromecasts(opts, cb) {
let devices = [];
if (typeof opts === "function") {
cb = opts;
opts = {};
}
opts = Object.assign({
timeout: 10000,
serviceName: "_googlecast._tcp.local",
serviceType: "PTR",
mdns: {},
count: 10
}, opts);
let timer = setTimeout(() => {
close();
cb(null, devices);
}, opts.timeout);
let m = mdns(opts.mdns);
m.on("response", onResponse);
m.query({
questions: [{
name: opts.serviceName,
type: opts.serviceType
}]
});
function onResponse(response) {
let answer = response.answers[0];
if (answer && (answer.name !== opts.serviceName || answer.type !== opts.serviceType)) {
return;
}
let info = response.additionals.find(entry => entry.type === "A");
if (!info || (opts.name && info.name !== opts.name)) {
return;
}
if (!devices.some(device => device.name === info.name)) {
devices.push(info);
}
if (devices.length >= opts.count) {
close();
cb(null, devices);
}
}
function close() {
clearTimeout(timer);
m.removeListener("response", onResponse);
m.destroy();
}
}
module.exports = pify(discoverChromecasts);