package com.lefu.remote.netty.blocking;
import io.netty.channel.ChannelInboundHandler;
import io.netty.channel.ChannelPipeline;
import io.netty.util.AttributeKey;
import java.net.SocketTimeoutException;
/**
* 阻塞读取接口定义,仅建议在客户端使用!!
* @author jiang.li
*
*/
public interface BlockingRead {
/**
* 默认的键名称
*/
public static final AttributeKey<BlockingRead> CHANNEL_BLOCKING_READ_KEY = AttributeKey.valueOf("__CHANNEL_BLOCKING_READ_KEY__");
/**
* 读取消息,消息是经过 {@link ChannelPipeline} 处理后的消息,由最后的业务Handler传递。
* <pre>
* 如果有存在的消息未读取,那么当前的操作会一次性读取完毕,并立即返回并不会阻塞,否则会等待消息读取或者读取超时
* 注意,此消息的读取先于{@link ChannelInboundHandler#channelRead(io.netty.channel.ChannelHandlerContext, Object)} 完成
* 另外,在出现读超时后,会默认关闭掉连接以处理超时带来的逻辑读取问题
* </pre>
* @return
* @throws SocketTimeoutException
*/
public Object read() throws SocketTimeoutException;
/**
* 清理资源
*/
public void clear();
}