protected void doDeliver(ServerSession sender, ServerMessage.Mutable mutable) { if (sender == this && !isBroadcastToPublisher()) return; ServerMessage message = null; if (mutable.isMeta()) { if (extendSendMeta(mutable)) message = mutable; } else { message = extendSendMessage(mutable); } if (message == null) return; _bayeux.freeze((Mutable) message); if (!_listeners.isEmpty()) { for (ServerSessionListener listener : _listeners) { if (listener instanceof MessageListener) { if (!notifyOnMessage((MessageListener) listener, sender, message)) return; } } } boolean wakeup; synchronized (getLock()) { if (!_listeners.isEmpty()) { for (ServerSessionListener listener : _listeners) { if (listener instanceof MaxQueueListener) { final int maxQueueSize = _maxQueue; if (maxQueueSize > 0 && _queue.size() > maxQueueSize) { if (!notifyQueueMaxed((MaxQueueListener) listener, this, _queue, sender, message)) return; } } } } addMessage(message); if (!_listeners.isEmpty()) { for (ServerSessionListener listener : _listeners) { if (listener instanceof QueueListener) notifyQueued((QueueListener) listener, sender, message); } } wakeup = _batch == 0; } if (wakeup) { if (message.isLazy()) flushLazy(message); else flush(); } }