Source: suxess/utils/batchSender.js

'use strict';

/**
 *
 * @param eventChannel
 * @param sendCallback
 * @constructor
 */
SUXESS.BatchSender = function (eventChannel, sendCallback) {
    this.bank = [];
    this.eventChannel = eventChannel;

    this.processAndSend = function () {
        var batch = this.bank.splice(0, this.bank.length);
        sendCallback(batch);
    };
};

SUXESS.BatchSender.DEFAULT_INTERVAL = 5000;

/**
 *
 * @param interval
 */
SUXESS.BatchSender.prototype.start = function (interval) {
    var sendInterval = interval || SUXESS.BatchSender.DEFAULT_INTERVAL;

    this.subToken = PubSub.subscribe(this.eventChannel, function (_, data) {
        this.bank.push(data);
    }.bind(this));

    this.intervalToken = setInterval(this.processAndSend.bind(this), sendInterval);
};

/**
 *
 */
SUXESS.BatchSender.prototype.forceSend = function () {
    this.processAndSend();
};

/**
 *
 */
SUXESS.BatchSender.prototype.stop = function () {
    clearInterval(this.intervalToken);
    PubSub.unsubscribe(this.subToken);
};