const { ipcRenderer } = require('electron'); let netmask = require('netmask').Netmask; let dgram = require('dgram'); let bonjour = require('bonjour')(); let net = require("net"); let os = require("os"); let ip = require("ip"); let DEVICE = require("./device.js"); let SEARCH = require("./search.js"); let PLUGINS = require("./plugins.js"); var searching = false; var allServers = false; searchAll = function(){ if(searching){ return true; } searching = true; ipcRenderer.send("disableSearchAll", ""); document.getElementById("search-button").style.opacity = 0.2; //console.clear(); for(var i in DEVICE.all){ DEVICE.infoUpdate(DEVICE.all[i], "status", "refresh"); } console.log("Searching...") //findOnlineDevices(); allServers = getServers(); var TCPFlag = true; if(allServers.length>2046){ alert("Unable to search for TCP devices - subnet too large!\n\nCue View requires subnet 255.255.248.0 (/21) or smaller.") TCPFlag = false; } console.log(PLUGINS) for(var p in PLUGINS.all){ var plugin = PLUGINS.all[p]; console.log(p) try{ switch(plugin.searchOptions.type){ case "TCPport": if(TCPFlag){ newSearchTCP(p, plugin); } break; case "Bonjour": newSearchBonjour(p, plugin) break; case "UDPsocket": newSearchUDP(p, plugin) break; } }catch(err){ console.error("Unable to search for plugin "+p) } } //searchBonjour(); //searchTCP(); //searchUDP(); setTimeout(function(){ searching = false; document.getElementById("search-button").style.opacity = ""; for(var i=0; i { if(plugin.searchOptions.validateResponse(data)){ DEVICE.registerDevice({ type: pluginType, defaultName: plugin.defaultName, port: plugin.defaultPort, addresses: [ip] }) } client.end(); }); client.on("error", function(err){ //no device here }); } // from local-devices library function getServers () { var interfaces = os.networkInterfaces() var result = [] for (var key in interfaces) { var addresses = interfaces[key] for (var i = addresses.length; i--;) { var address = addresses[i] if (address.family === 'IPv4' && !address.internal) { var subnet = ip.subnet(address.address, address.netmask) var current = ip.toLong(subnet.firstAddress) var last = ip.toLong(subnet.lastAddress) - 1 while (current++ < last) result.push(ip.fromLong(current)) } } } return result; } findOnlineDevices = function(){ var allInterfaces = require('os').networkInterfaces(); var validInterfaces = []; for(var i in allInterfaces){ for(var j=0; j { //console.log(err) }); setTimeout(function(){ searchSockets[i].send(plugin.searchOptions.searchBuffer, plugin.searchOptions.devicePort, '255.255.255.255', (err) => { //console.log(err) }); }, 100); setTimeout(function(){ searchSockets[i].send(plugin.searchOptions.searchBuffer, plugin.searchOptions.devicePort, '255.255.255.255', (err) => { //console.log(err) }); }, 400); searchSockets[i].on('message',function(msg,info){ if(plugin.searchOptions.validateResponse(msg, info)){ DEVICE.registerDevice({ type: pluginType, defaultName: plugin.defaultName, port: plugin.defaultPort, addresses: [info.address] }) } }); }); searchSockets[i].on('listening', function(){ searchSockets[i].setBroadcast(true); }); } // searchUDP = function(){ // dgramPJLink = dgram.createSocket('udp4'); // dgramPJLink.bind(function(){ // dgramPJLink.send(pjLinkMessage, 4352, '255.255.255.255', (err) => { // //console.log(err) // }); // dgramPJLink.on('message',function(msg,info){ // if(msg.toString().indexOf("%2ACKN")==0){ // DEVICE.registerDevice({ // type: "pjlink", // name: "PJLink Projector", // port: 4352, // addresses: [info.address] // }) // } // }); // }); // dgramPJLink.on('listening', function(){ // dgramPJLink.setBroadcast(true); // }); // dgramXAir = dgram.createSocket('udp4'); // dgramXAir.bind(function(){ // dgramXAir.send(xAirMessage, 10024, '255.255.255.255', (err) => { // //console.log(err) // }); // setTimeout(function(){ // dgramXAir.send(xAirMessage, 10024, '255.255.255.255', (err) => { // //console.log(err) // }); // }, 100); // dgramXAir.on('message',function(msg,info){ // if(msg.toString().indexOf("/xinfo,ssss")){ // DEVICE.registerDevice({ // type: "xair", // name: "X Air Mixer", // port: 10024, // addresses: [info.address] // }) // } // }); // }); // dgramXAir.on('listening', function(){ // dgramXAir.setBroadcast(true); // }); // }