-
Notifications
You must be signed in to change notification settings - Fork 1
/
vk_queue.js
48 lines (41 loc) · 1.33 KB
/
vk_queue.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
/**
* Created by Àíäðåé on 08.12.2015.
*/
var HashMap = require("hashmap");
/**
*
* @param period {number}
* @param onTimer {Function}
* @constructor
*/
var VkQueue = function (period, onTimer) {
var that = this;
this.hashMap = new HashMap();
this.shutdown_signal = false;
var interval = setInterval(function() {
var keys = that.hashMap.keys();
if (keys.length == 0 && that.shutdown_signal)
clearInterval(interval); //stop timer if queue is empty
for (var i =0; i<keys.length; i++) {
var key = keys[i];
var value = that.hashMap.get(key);
var currTime = new Date().getTime();
if (!value.in_process || (currTime - value.timestamp > 60*1000 /*retry after 1 minute */) ) {
value.in_process = true;
value.timestamp = currTime;
onTimer(key, value.message);
return; //try to send only one message per interval
}
}
} , period);
};
VkQueue.prototype.add = function(key, message) {
this.hashMap.set(key, {message: message, in_process: false, timestamp: new Date().getTime()});
};
VkQueue.prototype.remove = function(key) {
this.hashMap.remove(key);
};
VkQueue.prototype.shutdown = function () {
this.shutdown_signal = true;
};
module.exports = VkQueue;