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 boolean directSubscribe(final String subject, final MessageCallback callback, final boolean local, final WrappedCallbackHolder callbackHolder) { final boolean isNew = !isSubscribed(subject); final MessageCallback cb = new MessageCallback() { @Override public void callback(final Message message) { try { callback.callback(message); } catch (final Exception e) { handleCallbackError(message, e); } } }; callbackHolder.setWrappedCallback(cb); if (local) { addLocalSubscriptionEntry(subject, cb); } else { addSubscriptionEntry(subject, cb); } return isNew; }
directSubscribe(DefaultErrorCallback.CLIENT_ERROR_SUBJECT, clientBusErrorsCallback, false); directSubscribe(BuiltInServices.ClientBus.name(), protocolCommandCallback, false);
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 boolean directSubscribe(final String subject, final MessageCallback callback, final boolean local, final WrappedCallbackHolder callbackHolder) { final boolean isNew = !isSubscribed(subject); final MessageCallback cb = new MessageCallback() { @Override public void callback(final Message message) { try { callback.callback(message); } catch (final Exception e) { handleCallbackError(message, e); } } }; callbackHolder.setWrappedCallback(cb); if (local) { addLocalSubscriptionEntry(subject, cb); } else { addSubscriptionEntry(subject, cb); } return isNew; }
directSubscribe(DefaultErrorCallback.CLIENT_ERROR_SUBJECT, clientBusErrorsCallback, false); directSubscribe(BuiltInServices.ClientBus.name(), protocolCommandCallback, false);