diff --git a/libs/childNode.js b/libs/childNode.js index de233156..9bd492ae 100644 --- a/libs/childNode.js +++ b/libs/childNode.js @@ -66,6 +66,9 @@ module.exports = function(s,config,lang,app,io){ cn.emit('c',{f:'sqlCallback',rows:rows,err:err,callbackId:d.callbackId}); }); break; + case'clearCameraFromActiveList': + if(s.childNodes[ipAddress])delete(s.childNodes[ipAddress].activeCameras[d.ke + d.id]) + break; case'camera': s.camera(d.mode,d.data) break; @@ -239,6 +242,7 @@ module.exports = function(s,config,lang,app,io){ case'kill': s.initiateMonitorObject(d.d); s.cameraDestroy(s.group[d.d.ke].activeMonitors[d.d.id].spawn,d.d) + var childNodeIp = s.group[d.d.ke].activeMonitors[d.d.id] break; case'sync': s.initiateMonitorObject(d.sync); diff --git a/libs/monitor.js b/libs/monitor.js index a0d4bf65..79c4478b 100644 --- a/libs/monitor.js +++ b/libs/monitor.js @@ -7,8 +7,14 @@ var onvif = require('node-onvif'); var request = require('request'); var connectionTester = require('connection-tester') var SoundDetection = require('shinobi-sound-detection') +var async = require("async"); var URL = require('url') module.exports = function(s,config,lang){ + const startMonitorInQueue = async.queue(function(action, callback) { + setTimeout(function(){ + action(callback) + },2000) + }, 1) s.initiateMonitorObject = function(e){ if(!s.group[e.ke]){s.group[e.ke]={}}; if(!s.group[e.ke].activeMonitors){s.group[e.ke].activeMonitors={}} @@ -340,6 +346,9 @@ module.exports = function(s,config,lang){ delete(s.group[e.ke].activeMonitors[e.id].mp4frag[channel]) }) } + if(config.childNodes.enabled === true && config.childNodes.mode === 'child' && config.childNodes.host){ + s.cx({f:'clearCameraFromActiveList',ke:e.ke,id:e.id}) + } if(s.group[e.ke].activeMonitors[e.id].childNode){ s.cx({f:'kill',d:s.cleanMonitorObject(e)},s.group[e.ke].activeMonitors[e.id].childNodeId) }else{ @@ -1166,7 +1175,7 @@ module.exports = function(s,config,lang){ // e = monitor object //create host string without username and password var strippedHost = s.stripAuthFromHost(e) - var doOnThisMachine = function(){ + var doOnThisMachine = function(callback){ createCameraFolders(e,function(){ s.group[e.ke].activeMonitors[e.id].allowStdinWrite = false s.txToDashcamUsers({ @@ -1312,6 +1321,7 @@ module.exports = function(s,config,lang){ }else{ s.cameraDestroy(s.group[e.ke].activeMonitors[e.id].spawn,e) } + if(callback)callback() }) } var doOnChildMachine = function(){ @@ -1356,10 +1366,6 @@ module.exports = function(s,config,lang){ var selectNode = function(ip){ e.childNodeFound = true e.childNodeSelected = ip - // s.childNodes[ip].coreCount - s.group[e.ke].activeMonitors[e.id].onChildNodeExit = function(){ - if(s.childNodes[ip])delete(s.childNodes[ip].activeCameras[e.ke+e.id]) - } } var nodeWithLowestActiveCamerasCount = 65535 var nodeWithLowestActiveCameras = null @@ -1378,16 +1384,16 @@ module.exports = function(s,config,lang){ s.cx({f:'sync',sync:s.group[e.ke].rawMonitorConfigurations[e.id],ke:e.ke,mid:e.id},s.group[e.ke].activeMonitors[e.id].childNodeId); doOnChildMachine() }else{ - doOnThisMachine() + startMonitorInQueue.push(doOnThisMachine,function(){}) } }else{ - doOnThisMachine() + startMonitorInQueue.push(doOnThisMachine,function(){}) } }else{ - doOnThisMachine() + startMonitorInQueue.push(doOnThisMachine,function(){}) } }catch(err){ - doOnThisMachine() + startMonitorInQueue.push(doOnThisMachine,function(){}) console.log(err) } }