private Subscription _subscribeNow(final String subject, final MessageCallback callback, final boolean local) { if (BuiltInServices.ServerBus.name().equals(subject) && subscriptions.containsKey(BuiltInServices.ServerBus.name())) return null; final WrappedCallbackHolder wrappedCallbackHolder = new WrappedCallbackHolder(callback); fireAllSubscribeListeners(subject, local, directSubscribe(subject, callback, local, wrappedCallbackHolder)); return new Subscription() { @Override public void remove() { final List<MessageCallback> cbs = local ? localSubscriptions.get(subject) : subscriptions.get(subject); if (cbs != null) { cbs.remove(wrappedCallbackHolder.getWrappedCallback()); if (cbs.isEmpty()) { unsubscribeAll(subject); } } } }; }
private Subscription _subscribeNow(final String subject, final MessageCallback callback, final boolean local) { if (BuiltInServices.ServerBus.name().equals(subject) && subscriptions.containsKey(BuiltInServices.ServerBus.name())) return null; final WrappedCallbackHolder wrappedCallbackHolder = new WrappedCallbackHolder(callback); fireAllSubscribeListeners(subject, local, directSubscribe(subject, callback, local, wrappedCallbackHolder)); return new Subscription() { @Override public void remove() { final List<MessageCallback> cbs = local ? localSubscriptions.get(subject) : subscriptions.get(subject); if (cbs != null) { cbs.remove(wrappedCallbackHolder.getWrappedCallback()); if (cbs.isEmpty()) { unsubscribeAll(subject); } } } }; }