@Override public boolean removeConsumer(final QueueConsumer<?,?> consumer) { removeFromAll(consumer); QueueConsumerNode node = consumer.getQueueConsumerNode(); if (node.moveFromTo(STATES_OTHER_THAN_REMOVED, NodeState.REMOVED)) { _count--; return true; } return false; }
private void removeFromAll(final QueueConsumer<?,?> consumer) { final QueueConsumerNode node = consumer.getQueueConsumerNode(); int consumerPriority = consumer.getPriority(); for (int i = 0; i < _allConsumers.size(); ++i) { final PriorityConsumerListPair priorityConsumerListPair = _allConsumers.get(i); if (priorityConsumerListPair._priority == consumerPriority) { priorityConsumerListPair._consumers.removeEntry(node.getAllEntry()); if (priorityConsumerListPair._consumers.isEmpty()) { _allConsumers.remove(i); _notified.remove(i); _interested.remove(i); } return; } else if (priorityConsumerListPair._priority < consumerPriority) { break; } } }
@Override public boolean setNotified(final QueueConsumer<?,?> consumer, final boolean notified) { QueueConsumerNode node = consumer.getQueueConsumerNode(); if (consumer.acquires()) { if (notified) { return node.moveFromTo(INTERESTED, NodeState.NOTIFIED); } else { return node.moveFromTo(NOTIFIED, NodeState.INTERESTED); } } else { return true; } }
@Override public boolean setInterest(final QueueConsumer<?,?> consumer, final boolean interested) { QueueConsumerNode node = consumer.getQueueConsumerNode(); if (interested) { if (consumer.acquires()) { return node.moveFromTo(NOT_INTERESTED, NodeState.INTERESTED); } else { return node.moveFromTo(NOT_INTERESTED, NodeState.NON_ACQUIRING); } } else { if (consumer.acquires()) { return node.moveFromTo(EITHER_INTERESTED_OR_NOTIFIED, NodeState.NOT_INTERESTED); } else { return node.moveFromTo(NON_ACQUIRING, NodeState.NOT_INTERESTED); } } }