package com.tecspy.protocol;

import java.io.IOException;

/**
 * A processor of bytes from an input stream or similar.
 * 
 * Decouples the reader of a stream from the processor of the bytes received from
 * that stream. Allows the creation of pluggable test/production interfaces.
 * 
 * @author Michael Erskine
 * 
 */
public interface ByteSink {
	/**
	 * An input stream or similar has provided us with some bytes to process.
	 * 
	 * @param buf
	 *            array of buffered bytes
	 * @param len
	 *            number of relevant bytes from the buffer
	 * @return some indication of activity, e.g. the number of bytes processed
	 */
	public int processBytes(byte[] buf, int len);

	/**
	 * An input stream or similar has encountered the end-of-file condition.
	 */
	public void processEof();

	/**
	 * An input stream or similar has encountered an exception during IO.
	 * 
	 * @param e
	 *            the exception encountered
	 */
	public void processException(IOException e);
}
