All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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