|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+var Redis = require("ioredis");
|
|
|
2
|
+var redis = new Redis();
|
|
|
3
|
+var scheduler = require("node-schedule");
|
|
|
4
|
+var notification_controller = require("./notification-controller.js");
|
|
|
5
|
+var registered_events = {};
|
|
|
6
|
+
|
|
|
7
|
+module.exports = {
|
|
|
8
|
+
|
|
|
9
|
+ schedule_event: function (event_id, time) {
|
|
|
10
|
+ var event_time = new Date(Number(time));
|
|
|
11
|
+ console.log("Scheduled event for " + event_time);
|
|
|
12
|
+ var job = scheduler.scheduleJob(event_time, function(evt_id) {
|
|
|
13
|
+ notification_controller.send_notifications_for(evt_id);
|
|
|
14
|
+ }.bind(null, event_id));
|
|
|
15
|
+ registered_events[event_id] = job;
|
|
|
16
|
+ },
|
|
|
17
|
+
|
|
|
18
|
+ register_existing_events: function () {
|
|
|
19
|
+ var self = this;
|
|
|
20
|
+ var stream = redis.scanStream({
|
|
|
21
|
+ match: "event:*"
|
|
|
22
|
+ });
|
|
|
23
|
+ var event_ids = [];
|
|
|
24
|
+ stream.on('data', function (keys) {
|
|
|
25
|
+ keys.map(function (key) {
|
|
|
26
|
+ event_ids.push(key);
|
|
|
27
|
+ });
|
|
|
28
|
+ })
|
|
|
29
|
+ stream.on('end', function () {
|
|
|
30
|
+ var event_controller = require("./event-controller.js");
|
|
|
31
|
+ for (var ii = 0; ii < event_ids.length; ii++) {
|
|
|
32
|
+ event_controller.get_event(event_ids[ii], "", function (response) {
|
|
|
33
|
+ var event = response.event;
|
|
|
34
|
+ self.schedule_event(event.id, event.start);
|
|
|
35
|
+ }, true);
|
|
|
36
|
+ }
|
|
|
37
|
+ });
|
|
|
38
|
+ },
|
|
|
39
|
+
|
|
|
40
|
+ cancel_registered: function (event_id) {
|
|
|
41
|
+ var event = registered_events[event_id];
|
|
|
42
|
+ if (event !== undefined) {
|
|
|
43
|
+ event.cancel();
|
|
|
44
|
+ delete registered_events.event_id;
|
|
|
45
|
+ }
|
|
|
46
|
+ }
|
|
|
47
|
+
|
|
|
48
|
+}
|