protected boolean close(PushEvent<T> event) { return close(event, true); }
protected boolean close(PushEvent<T> event) { return close(event, true); }
protected boolean close(PushEvent<T> event) { return close(event, true); }
@Override protected boolean close(PushEvent<T> event, boolean sendDownStreamEvent) { if (super.close(event, sendDownStreamEvent)) { upstreamClose(event); return true; } return false; }
@Override protected boolean close(PushEvent<T> event, boolean sendDownStreamEvent) { if (super.close(event, sendDownStreamEvent)) { upstreamClose(event); return true; } return false; }
@Override protected boolean close(PushEvent<T> event, boolean sendDownStreamEvent) { if (super.close(event, sendDownStreamEvent)) { upstreamClose(event); return true; } return false; }
@Override public void close() { PushEvent<T> close = PushEvent.close(); if (close(close, true)) { upstreamClose(close); } }
@Override public void close() { PushEvent<T> close = PushEvent.close(); if (close(close, true)) { upstreamClose(close); } }
@Override public void close() { PushEvent<T> close = PushEvent.close(); if (close(close, true)) { upstreamClose(close); } }
private <R> void aggregateAndForward(BiFunction<Long,Collection<T>,R> f, AbstractPushStreamImpl<R> eventStream, PushEvent< ? extends T> event, Queue<T> queue, Executor executor, long elapsed) { executor.execute(() -> { try { if (!queue.offer(event.getData())) { ((ArrayQueue<T>) queue).forcePush(event.getData()); } long result = eventStream.handleEvent(PushEvent.data( f.apply(Long.valueOf(NANOSECONDS.toMillis(elapsed)), queue))); if (result < 0) { close(); } } catch (Exception e) { close(PushEvent.error(e)); } }); }
void check(AtomicLong lastTime, long timeout) { long now = System.nanoTime(); long elapsed = now - lastTime.get(); if (elapsed < timeout) { promiseFactory.scheduledExecutor().schedule( () -> check(lastTime, timeout), timeout - elapsed, NANOSECONDS); } else { PushEvent<T> error = PushEvent.error(new TimeoutException()); close(error); // Upstream close is needed as we have no direct backpressure upstreamClose(error); } }
@Override public PushStream<T> sequential() { AbstractPushStreamImpl<T> eventStream = new IntermediatePushStreamImpl<>( psp, promiseFactory, this); Lock lock = new ReentrantLock(); updateNext((event) -> { try { lock.lock(); try { return eventStream.handleEvent(event); } finally { lock.unlock(); } } catch (Exception e) { close(PushEvent.error(e)); return ABORT; } }); return eventStream; }
@Override public PushStream<T> sequential() { AbstractPushStreamImpl<T> eventStream = new IntermediatePushStreamImpl<>( psp, promiseFactory, this); Lock lock = new ReentrantLock(); updateNext((event) -> { try { lock.lock(); try { return eventStream.handleEvent(event); } finally { lock.unlock(); } } catch (Exception e) { close(PushEvent.error(e)); return ABORT; } }); return eventStream; }
void check(AtomicLong lastTime, long timeout) { long now = System.nanoTime(); long elapsed = now - lastTime.get(); if (elapsed < timeout) { promiseFactory.scheduledExecutor().schedule( () -> check(lastTime, timeout), timeout - elapsed, NANOSECONDS); } else { PushEvent<T> error = PushEvent.error(new TimeoutException()); close(error); // Upstream close is needed as we have no direct backpressure upstreamClose(error); } }
void check(AtomicLong lastTime, long timeout) { long now = System.nanoTime(); long elapsed = now - lastTime.get(); if (elapsed < timeout) { promiseFactory.scheduledExecutor().schedule( () -> check(lastTime, timeout), timeout - elapsed, NANOSECONDS); } else { PushEvent<T> error = PushEvent.error(new TimeoutException()); close(error); // Upstream close is needed as we have no direct backpressure upstreamClose(error); } }
@Override public PushStream<T> adjustBackPressure(LongUnaryOperator adjustment) { AbstractPushStreamImpl<T> eventStream = new IntermediatePushStreamImpl<>( psp, promiseFactory, this); updateNext(event -> { try { long bp = eventStream.handleEvent(event); if (event.isTerminal()) { return ABORT; } else { return bp < 0 ? bp : adjustment.applyAsLong(bp); } } catch (Exception e) { close(PushEvent.error(e)); return ABORT; } }); return eventStream; }
@Override public PushStream<T> adjustBackPressure(LongUnaryOperator adjustment) { AbstractPushStreamImpl<T> eventStream = new IntermediatePushStreamImpl<>( psp, promiseFactory, this); updateNext(event -> { try { long bp = eventStream.handleEvent(event); if (event.isTerminal()) { return ABORT; } else { return bp < 0 ? bp : adjustment.applyAsLong(bp); } } catch (Exception e) { close(PushEvent.error(e)); return ABORT; } }); return eventStream; }
@Override public <R> PushStream<R> map(Function< ? super T, ? extends R> mapper) { AbstractPushStreamImpl<R> eventStream = new IntermediatePushStreamImpl<>( psp, promiseFactory, this); updateNext(event -> { try { if (!event.isTerminal()) { return eventStream.handleEvent( PushEvent.data(mapper.apply(event.getData()))); } else { return eventStream.handleEvent(event.nodata()); } } catch (Exception e) { close(PushEvent.error(e)); return ABORT; } }); return eventStream; }
@Override public <R> PushStream<R> map(Function< ? super T, ? extends R> mapper) { AbstractPushStreamImpl<R> eventStream = new IntermediatePushStreamImpl<>( psp, promiseFactory, this); updateNext(event -> { try { if (!event.isTerminal()) { return eventStream.handleEvent( PushEvent.data(mapper.apply(event.getData()))); } else { return eventStream.handleEvent(event.nodata()); } } catch (Exception e) { close(PushEvent.error(e)); return ABORT; } }); return eventStream; }
@Override public <R> PushStream<R> map(Function< ? super T, ? extends R> mapper) { AbstractPushStreamImpl<R> eventStream = new IntermediatePushStreamImpl<>( psp, promiseFactory, this); updateNext(event -> { try { if (!event.isTerminal()) { return eventStream.handleEvent( PushEvent.data(mapper.apply(event.getData()))); } else { return eventStream.handleEvent(event.nodata()); } } catch (Exception e) { close(PushEvent.error(e)); return ABORT; } }); return eventStream; }