/*
* Copyright 2014 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package net.kuujo.vertigo.io;
import net.kuujo.vertigo.io.group.InputGroupSupport;
import org.vertx.java.core.Handler;
import org.vertx.java.core.Vertx;
/**
* Basic input interface.
*
* @author <a href="http://github.com/kuujo">Jordan Halterman</a>
*
* @param <T> The input type.
*/
public interface Input<T extends Input<T>> extends InputGroupSupport<T> {
/**
* Returns the input's vertx instance.
*
* @return The inputs Vert.x instance.
*/
Vertx vertx();
/**
* Pauses the input.<p>
*
* When the input is paused, messages received by the input will be buffered,
* so it is important that inputs not be paused for too long if messages
* continue to flow.
*
* @return The input.
*/
T pause();
/**
* Resumes receiving data on the input.<p>
*
* When the input is resumed, any messages that were buffered during the pause
* will be processed first. Once the input's buffer is empty it will resume
* normal operation.
*
* @return The input.
*/
T resume();
/**
* Registers a message handler on the input.<p>
*
* The message handler can accept any message type that is supported by
* the Vert.x event bus. Vertigo messages cannot be replied to and do not
* need to be acked. The input handles communicating and coordinating with
* outputs internally.
*
* @param handler A message handler.
* @return The input.
*/
<U> T messageHandler(Handler<U> handler);
}