1
0
mirror of synced 2024-11-16 19:13:49 +00:00
SecurityCam.js/capture.js

120 lines
2.2 KiB
JavaScript
Raw Normal View History

2016-07-10 17:34:49 +00:00
var http = require('http');
var stream = require('stream');
var logger = require('./logger');
2016-07-10 17:34:49 +00:00
function runCommand(command, displayName, callback)
2016-07-10 17:34:49 +00:00
{
var wait = function()
2016-07-10 17:34:49 +00:00
{
if (command.wait)
{
setTimeout(callback, command.wait)
}
else
callback();
}
if (command.url)
{
logger.verbose('Running command: ' + (command.displayName ? command.displayName : displayName));
req = http.request(command.url, function(res)
{
res.resume();
wait();
});
req.on('error', function(e)
{
logger.error(e);
wait();
});
2016-07-10 17:34:49 +00:00
req.end();
}
else
wait();
}
2016-07-10 17:34:49 +00:00
function runCommands(commandArray, displayName, callback)
{
if (!commandArray || !commandArray.length)
{
callback();
return;
}
2016-07-10 17:34:49 +00:00
var commandIndex = 0;
(function runNextCommand()
{
if (commandIndex < commandArray.length)
2016-07-10 17:34:49 +00:00
{
runCommand(commandArray[commandIndex], displayName + ' #' + (commandIndex + 1), function()
2016-07-10 17:34:49 +00:00
{
runNextCommand();
});
commandIndex++;
}
else
callback();
})();
}
2016-07-10 17:34:49 +00:00
module.exports =
{
init: function(cams)
{
// Preload all modules to get error messages early
for (var camId in cams)
{
if (cams.hasOwnProperty(camId))
2016-07-10 17:34:49 +00:00
{
require('./processor-' + cams[camId].processor);
2016-07-10 17:34:49 +00:00
}
}
},
start: function(camId, cam, now)
{
var processor = new (require('./processor-' + cam.processor))(camId, cam, now);
var duringCommandsDone = false;
var queueAfterCommand = false;
2016-07-10 17:34:49 +00:00
runCommands(cam.before, 'before', function()
2016-07-10 17:34:49 +00:00
{
processor.on('start', function()
2016-07-10 17:34:49 +00:00
{
runCommands(cam.during, 'during', function()
{
// Check if the processor has already finished and the
// 'after' commands should be run immediately.
if (queueAfterCommand)
runCommands(cam.after, 'after', function() { });
else
duringCommandsDone = true;
});
2016-07-10 17:34:49 +00:00
});
processor.on('end', function()
2016-07-10 17:34:49 +00:00
{
// If the stream is cut short, or the time is configured
// to be less than the duration of the 'during' commands,
// queue it up.
if (duringCommandsDone)
runCommands(cam.after, 'after', function() { });
else
queueAfterCommand = true;
2016-07-10 17:34:49 +00:00
});
processor.run();
2016-07-10 17:34:49 +00:00
});
}
};