io.datakernel.datastream.StreamConsumerEndpoint Maven / Gradle / Ivy
package io.datakernel.datastream;
import io.datakernel.csp.queue.ChannelBuffer;
import io.datakernel.promise.Promise;
public final class StreamConsumerEndpoint extends AbstractStreamConsumer implements StreamDataAcceptor {
public static final int DEFAULT_BUFFER_SIZE = 10;
private final ChannelBuffer buffer;
public StreamConsumerEndpoint() {
this(0, DEFAULT_BUFFER_SIZE);
}
public StreamConsumerEndpoint(int bufferSize) {
this(0, bufferSize);
}
private StreamConsumerEndpoint(int bufferMinSize, int bufferMaxSize) {
this.buffer = new ChannelBuffer<>(bufferMinSize, bufferMaxSize);
}
@Override
protected void onStarted() {
getSupplier().resume(this);
}
@Override
public void accept(T item) {
assert item != null;
try {
buffer.add(item);
} catch (RuntimeException e) {
throw e;
} catch (Exception e) {
close(e);
return;
}
if (buffer.isSaturated()) {
getSupplier().suspend();
}
}
@Override
protected Promise onEndOfStream() {
return buffer.put(null);
}
@Override
protected void onError(Throwable e) {
buffer.close(e);
}
public Promise take() {
if (buffer.willBeExhausted()) {
getSupplier().resume(this);
}
return buffer.take();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy