mirror of
				https://github.com/node-red/node-red.git
				synced 2025-03-01 10:36:34 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			94 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			94 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
/**
 | 
						|
 * Copyright 2013 IBM Corp.
 | 
						|
 *
 | 
						|
 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
						|
 * you may not use this file except in compliance with the License.
 | 
						|
 * You may obtain a copy of the License at
 | 
						|
 *
 | 
						|
 * http://www.apache.org/licenses/LICENSE-2.0
 | 
						|
 *
 | 
						|
 * Unless required by applicable law or agreed to in writing, software
 | 
						|
 * distributed under the License is distributed on an "AS IS" BASIS,
 | 
						|
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
						|
 * See the License for the specific language governing permissions and
 | 
						|
 * limitations under the License.
 | 
						|
 **/
 | 
						|
 | 
						|
var RED = require("../../red/red");
 | 
						|
try {
 | 
						|
    var cron = require("cron");
 | 
						|
} catch(err) {
 | 
						|
    require("util").log("[inject] Warning: cannot find module 'cron'");
 | 
						|
}
 | 
						|
 | 
						|
function InjectNode(n) {
 | 
						|
	RED.nodes.createNode(this,n);
 | 
						|
	this.topic = n.topic;
 | 
						|
	this.payload = n.payload;
 | 
						|
	this.repeat = n.repeat;
 | 
						|
	this.crontab = n.crontab;
 | 
						|
	this.once = n.once;
 | 
						|
	var node = this;
 | 
						|
	this.interval_id = null;
 | 
						|
	this.cronjob = null;
 | 
						|
 | 
						|
	if (this.repeat && !isNaN(this.repeat) && this.repeat > 0) {
 | 
						|
		this.repeat = this.repeat * 1000;
 | 
						|
		this.log("repeat = "+this.repeat);
 | 
						|
		this.interval_id = setInterval( function() {
 | 
						|
			node.emit("input",{});
 | 
						|
		}, this.repeat );
 | 
						|
	} else if (this.crontab) {
 | 
						|
	    if (cron) {
 | 
						|
	        this.log("crontab = "+this.crontab);
 | 
						|
	        this.cronjob = new cron.CronJob(this.crontab,
 | 
						|
	            function() {
 | 
						|
	                node.emit("input",{});
 | 
						|
	            },
 | 
						|
	            null,true);
 | 
						|
	    } else {
 | 
						|
	        this.error("'cron' module not found");
 | 
						|
	    }
 | 
						|
	}
 | 
						|
 | 
						|
	if (this.once) {
 | 
						|
		setTimeout( function(){ node.emit("input",{}); }, 50);
 | 
						|
	}
 | 
						|
 | 
						|
	this.on("input",function(msg) {
 | 
						|
		var msg = {topic:this.topic,payload:this.payload};
 | 
						|
		if (msg.payload == "") { msg.payload = Date.now(); }
 | 
						|
		this.send(msg);
 | 
						|
		msg = null;
 | 
						|
	});
 | 
						|
}
 | 
						|
 | 
						|
RED.nodes.registerType("inject",InjectNode);
 | 
						|
 | 
						|
InjectNode.prototype.close = function() {
 | 
						|
    if (this.interval_id != null) {
 | 
						|
        clearInterval(this.interval_id);
 | 
						|
        this.log("inject: repeat stopped");
 | 
						|
    } else if (this.cronjob != null) {
 | 
						|
        this.cronjob.stop();
 | 
						|
        this.log("inject: cronjob stopped");
 | 
						|
        delete this.cronjob;
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
RED.app.post("/inject/:id", function(req,res) {
 | 
						|
        var node = RED.nodes.getNode(req.params.id);
 | 
						|
        if (node != null) {
 | 
						|
            try {
 | 
						|
                node.receive();
 | 
						|
                res.send(200);
 | 
						|
            } catch(err) {
 | 
						|
                res.send(500);
 | 
						|
                node.error("Inject failed:"+err);
 | 
						|
                console.log(err.stack);
 | 
						|
            }
 | 
						|
        } else {
 | 
						|
            res.send(404);
 | 
						|
        }
 | 
						|
});
 |