/* ------------------------------------------------------------ */ public MessageImpl newMessage(Message associated) { MessageImpl message = _messagePool.poll(); if (message == null) message = new MessageImpl(this); message.incRef(); if (associated != null) message.setAssociated(associated); return message; }
/* ------------------------------------------------------------ */ protected void doDelivery(Client from, final Message msg) { final Message message = _bayeux.extendSendClient(from, this, msg); if (message == null) return; MessageListener[] alisteners = null; synchronized (this) { if (_maxQueue < 0) { // No queue limit, so always queue the message ((MessageImpl) message).incRef(); _queue.addUnsafe(message); } else { // We have a queue limit, boolean queue; if (_queue.size() >= _maxQueue) { // We are over the limit, so consult listeners if (_qListeners != null && _qListeners.length > 0) { queue = true; for (QueueListener l : _qListeners) queue &= l.queueMaxed(from, this, message); } else queue = false; } else // we are under limit, so queue the messages. queue = true; // queue the message if we are meant to if (queue) { ((MessageImpl) message).incRef(); _queue.addUnsafe(message); } } // deliver synchronized if (_syncMListeners != null) for (MessageListener l : _syncMListeners) l.deliver(from, this, message); alisteners = _asyncMListeners; if (_batch == 0 && _responsesPending < 1 && _queue.size() > 0) { if (((MessageImpl) message).isLazy()) lazyResume(); else resume(); } } // deliver unsynchronized if (alisteners != null) for (MessageListener l : alisteners) l.deliver(from, this, message); }
/* ------------------------------------------------------------ */ public MessageImpl newMessage() { MessageImpl message = _messagePool.poll(); if (message == null) message = new MessageImpl(this); message.incRef(); return message; }