@Nonnull @Override public Connection<J> connect(Consumer<O> output) throws ConnectionLimitExceededException { final Connection<I> delegateConnection = connectable.connect(output); return new Connection<J>() { @Override public void accept(J value) { delegateConnection.accept(mapper.apply(value)); } @Override public void dispose() { delegateConnection.dispose(); } }; } };
@Nonnull @Override public Connection<F> connect(Consumer<E> output) { final SafeConsumer<E> safeEventConsumer = new SafeConsumer<>(checkNotNull(output)); final Connection<F> effectConsumer = new SafeEffectConsumer<>(checkNotNull(actual.connect(safeEventConsumer))); final Disposable disposable = CompositeDisposable.from(safeEventConsumer, effectConsumer); return new Connection<F>() { @Override public synchronized void accept(F effect) { effectConsumer.accept(effect); } @Override public synchronized void dispose() { disposable.dispose(); } }; }
@Nonnull @Override public Connection<F> connect(Consumer<E> output) { final SafeConsumer<E> safeEventConsumer = new SafeConsumer<>(checkNotNull(output)); final Connection<F> effectConsumer = new SafeEffectConsumer<>(checkNotNull(actual.connect(safeEventConsumer))); final Disposable disposable = CompositeDisposable.from(safeEventConsumer, effectConsumer); return new Connection<F>() { @Override public synchronized void accept(F effect) { effectConsumer.accept(effect); } @Override public synchronized void dispose() { disposable.dispose(); } }; }
@Test public void shouldApplyMappingFunctionToIncoming() throws Exception { mapped.connect(output).accept(98.0); assertThat(mapParameter.get(), is(98.0)); }
@Test public void shouldPropagateToOutgoing() throws Exception { mapped.connect(output).accept(101.0); assertThat(output.received(), is(singletonList(5))); }
@Test public void shouldPropagateDispose() throws Exception { mapped.connect(output).dispose(); assertThat(delegate.isDisposed(), is(true)); }
this.effectConsumer = effectHandler.connect(eventConsumer); this.eventSourceDisposable = eventSource.subscribe(eventConsumer);
this.effectConsumer = effectHandler.connect(eventConsumer); this.eventSourceDisposable = eventSource.subscribe(eventConsumer);