package  org.ts.ddcs.datatemplate;


import org.ts.ddcs.dataStream.DataStreamAdapter;
import org.ts.ddcs.dataStream.DataStreamInterface;
import org.ts.ddcs.dataprocesser.DataProcesserInterface;
import org.ts.ddcs.filter.DataFilter;


/**
 * 数据模板接口
 *
 * @author dylan
 */
public abstract interface DataTemplateInterface {
    /**
     * 重置
     */
    public abstract void ready();

    /**
     * 流处理
     *
     * @param s
     */
    public abstract void stream(DataStreamInterface s);

    /**
     * 数据长度
     *
     * @return
     */
    public abstract int length();

    /**
     * 取匹配状态
     *
     * @return
     */
    public abstract TestState state();

    /**
     * 取特性权重
     *
     * @return
     */
    public abstract int featureWeight();

    /**
     * 设置特性权重
     *
     * @param weight
     */
    public abstract void setFeatureWeight(int weight);

    /**
     * 取模板名称
     *
     * @return
     */
    public abstract String getName();

    /**
     * 设置模板名称
     *
     * @param name
     */
    public abstract void setName(String name);

    /**
     * 设置特性
     *
     * @param fetureKey
     * @param fetureIndex
     */
    public abstract void setFeature(byte[] fetureKey, byte[] fetureIndex);

    /**
     * 连接到数据处理器
     *
     * @param processer
     * @param dataStreamAdapter
     */
    public abstract void bridgeDataProcessor(DataProcesserInterface processer, DataStreamAdapter dataStreamAdapter);

    /**
     * 连接到过滤器
     *
     * @param filter
     * @param dataStreamAdapter
     * @return
     */
    public abstract boolean bridgeDataFilter(DataFilter filter, DataStreamAdapter dataStreamAdapter);

    /**
     * 功能码
     *
     * @return
     */
    public abstract byte[] funcCode();

    /**
     * 测站编码
     *
     * @return
     */
    public abstract byte[] rtuCode();

    /**
     * 报文内容
     *
     * @return
     */
    public abstract byte[] datagramContext();

    /**
     * 规约
     *
     * @return
     */
    public abstract String agreement();

    /**
     * 分包
     *
     * @return
     */
    public abstract boolean hasNext();

    /**
     * 分包总数
     * @return
     */
    public abstract int packageTotal();

    /**
     * 分包序号
     * @return
     */
    public abstract int packageIndex();

    /**
     * 消息正文
     * @return
     */
    public abstract byte[] body();
}
