client.connect(host, function() { /////////////////////////////////////////////////////////////////////// // Handler for connected device /////////////////////////////////////////////////////////////////////// out("CONNECTED", "device", device); var nbSent = 0; var nbReceived = 0; if (!checkInstance(host, ref)) return; // create various namespace handlers var connection = client.createChannel('sender-0', 'receiver-0', 'urn:x-cast:com.google.cast.tp.connection', 'JSON'); var heartbeat = client.createChannel('sender-0', 'receiver-0', 'urn:x-cast:com.google.cast.tp.heartbeat', 'JSON'); var receiver = client.createChannel('sender-0', 'receiver-0', 'urn:x-cast:com.google.cast.receiver', 'JSON'); // establish virtual connection to the receiver connection.send({ type: 'CONNECT' }); // start heartbeating var iid = setInterval(function() { // remove non-responding if (nbSent>8 && nbSent/2>nbReceived) removeInstance(host, ref); if (!hasInstance(host, ref)) { // dead or deleted instance connection.close(); heartbeat.close(); receiver.close(); client.close(); clearInterval(iid); } else { // ping out("GET_STATUS", "get_status_request", {name:name, nbSent:nbSent, nbReceived:nbReceived}); ++nbSent; receiver.send({ "type": "GET_STATUS", "requestId": ++seq }); } }, POLL_DELAY_MS); // display receiver status updates receiver.on('message', function(data, broadcast) { if(data.type) { ++nbReceived; var message = { "device": device, "type": data.type }; message[data.type.toLowerCase()] = data; out("MESSAGE", "message", message); } }); // initial status setTimeout(function() { if (hasInstance(host, ref)) receiver.send({ "type": "GET_STATUS", "requestId": ++seq }); }, 2000); });
var iid = setInterval(function() { // remove non-responding if (nbSent>8 && nbSent/2>nbReceived) removeInstance(host, ref); if (!hasInstance(host, ref)) { // dead or deleted instance connection.close(); heartbeat.close(); receiver.close(); client.close(); clearInterval(iid); } else { // ping out("GET_STATUS", "get_status_request", {name:name, nbSent:nbSent, nbReceived:nbReceived}); ++nbSent; receiver.send({ "type": "GET_STATUS", "requestId": ++seq }); } }, POLL_DELAY_MS);