text: // Generated by CoffeeScript 1.8.0
  var MessageQueue, utils, _;
  
  _ = require('underscore');
  
  utils = require('./utils');
  
  module.exports = utils.registerClass(MessageQueue = (function() {
    function MessageQueue() {
      this.messages = [];
      this.closed = false;
      this.callback = null;
      this.timer = null;
      _.bindAll(this, '_timerExpired', '_updated');
    }
  
    MessageQueue.prototype.shutdown = function() {
      if (this.closed) {
        return;
      }
      this.closed = true;
      if (this.timer) {
        clearTimeout(this.timer);
      }
      if (this.callback) {
        this.callback.call(null, this.messages);
      }
      this.callback = null;
      this.messages = null;
      return this.timer = null;
    };
  
    MessageQueue.prototype.push = function(message) {
      if (this.closed) {
        return;
      }
      this.messages.push(message);
      return process.nextTick(this._updated);
    };
  
    MessageQueue.prototype.pullAll = function(timeout, callback) {
      if (this.closed) {
        return callback.call(null, null);
      }
      if (this.callback) {
        return callback.call(null, []);
      }
      if (this.messages.length) {
        callback.call(null, this.messages);
        this.messages = [];
        return;
      }
      this.callback = callback;
      return this.timer = setTimeout(this._timerExpired, timeout);
    };
  
    MessageQueue.prototype._timerExpired = function() {
      return this._updated();
    };
  
    MessageQueue.prototype._updated = function() {
      var callback, messages;
      if (this.closed) {
        return;
      }
      if (!this.callback) {
        return;
      }
      callback = this.callback;
      messages = this.messages;
      if (this.timer) {
        clearTimeout(this.timer);
      }
      this.callback = null;
      this.messages = [];
      this.timer = null;
      return callback.call(null, messages);
    };
  
    return MessageQueue;
  
  })());
  