You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

52 lines
1.2 KiB

/*
* node-rdkafka - Node.js wrapper for RdKafka C/C++ library
*
* Copyright (c) 2016 Blizzard Entertainment
*
* This software may be modified and distributed under the terms
* of the MIT license. See the LICENSE.txt file for details.
*/
module.exports = RefCounter;
/**
* Ref counter class.
*
* Is used to basically determine active/inactive and allow callbacks that
* hook into each.
*
* For the producer, it is used to begin rapid polling after a produce until
* the delivery report is dispatched.
*/
function RefCounter(onActive, onPassive) {
this.context = {};
this.onActive = onActive;
this.onPassive = onPassive;
this.currentValue = 0;
this.isRunning = false;
}
/**
* Increment the ref counter
*/
RefCounter.prototype.increment = function() {
this.currentValue += 1;
// If current value exceeds 0, activate the start
if (this.currentValue > 0 && !this.isRunning) {
this.isRunning = true;
this.onActive(this.context);
}
};
/**
* Decrement the ref counter
*/
RefCounter.prototype.decrement = function() {
this.currentValue -= 1;
if (this.currentValue <= 0 && this.isRunning) {
this.isRunning = false;
this.onPassive(this.context);
}
};