thenDo(null, JSON.parse(content));
function stopSubprocess(rState, options, id, thenDo) {
var code = util.format("LivelyREvaluate::stopEvaluation('%s')", id);
withLivelyREvaluateDo(rState, options, code, thenDo);
function cleanup(subserver) {
console.log('RServer is shutting down...');
if (state.process) state.process.kill();
subserver && subserver.removeAllListeners();
module.exports = domain.bind(function(route, app, subserver) {
subserver.on('close', cleanup.bind(null, subserver));
app.post(route+'eval', function(req, res) {
var expr = req.body && req.body.expr,
timeout = req.body && req.body.timeout;
var msg = {error: 'Cannot deal with request', message: 'No expression'};
res.status(400).json(msg).end();
evalRExpression(state, {timeout: timeout}, expr, function(err, output) {
if (err) { res.status(500).json({error: String(err)}).end(); return; }
res.json({result: output}).end();
app.post(route+'evalAsync', function(req, res) {
var expr = req.body && req.body.expr,
id = req.body && req.body.id,
timeout = req.body && req.body.timeout,
exit = req.body && req.body.exit,
debug = req.body && req.body.debug;
var msg = {error: 'Cannot deal with request', message: 'No expression or id'};