3 var RingBuffer = require('./ring_buffer');
5 var Functor = function(session, method) {
6 this._session = session;
8 this._queue = new RingBuffer(Functor.QUEUE_SIZE);
13 Functor.QUEUE_SIZE = 8;
15 Functor.prototype.call = function(error, message, callback, context) {
16 if (this._stopped) return;
18 var record = {error: error, message: message, callback: callback, context: context, done: false},
22 this._queue.push(record);
27 return this._flushQueue();
30 this._session[this._method](message, function(err, msg) {
31 if (!(called ^ (called = true))) return;
36 record.message = null;
46 Functor.prototype._stop = function() {
47 this.pending = this._queue.length;
51 Functor.prototype._flushQueue = function() {
52 var queue = this._queue, record;
54 while (queue.length > 0 && queue.peek().done) {
56 record = queue.shift();
57 record.callback.call(record.context, record.error, record.message);
61 module.exports = Functor;