package com.walker.tcp.protocol; import com.walker.tcp.ProtocolException; import com.walker.tcp.ProtocolResolver; import com.walker.tcp.Response; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public abstract class AbstractProtocolResolver implements ProtocolResolver { protected final transient Logger logger = LoggerFactory.getLogger(getClass()); private String name; // private String feature; private Object feature; private String delimiter; private int order = 0; public int getOrder() { return order; } public void setOrder(int order) { this.order = order; } public void setName(String name) { this.name = name; } public void setProtocolFeature(Object feature) { this.feature = feature; } public void setDelimiter(String delimiter) { this.delimiter = delimiter; } @Override public String getName() { return this.name; } @Override public String getProtocolNum(T data, int size) throws ProtocolException { return this.onResolve(data, size); } @Override // public String getProtocolFeature() { public Object getProtocolFeature() { return this.feature; } @Override public String getDelimiter() { return this.delimiter; } /** * 解析具体数据协议编号 * @param data * @return * @throws ProtocolException */ // protected abstract String onResolve(String data, int size) throws ProtocolException; protected abstract String onResolve(T data, int size) throws ProtocolException; @Override public boolean isRequireFeatureResolve(){ return false; } /** * 该方法为了在界面上让freemarker展示使用 * @return */ public boolean getRequireFeatureResolve(){ return isRequireFeatureResolve(); } private Response heartBeatResponse = null; public Response getHeartBeatResponse(){ if(heartBeatResponse == null){ heartBeatResponse = this.doCreateOneResponse(); } return heartBeatResponse; } /** * 产生一个心跳响应对象 * @return */ protected abstract Response doCreateOneResponse(); private boolean permitNotRegisterConnect = false; public void setPermitNotRegisterConnect(boolean permitNotRegisterConnect) { this.permitNotRegisterConnect = permitNotRegisterConnect; } /** * 判断是否允许未注册设备连接平台,如果设置为false,那么该方法将配合:isRegistered()来限制未注册设备访问。

* 子类需要重新覆盖isReistered()方法。 */ public boolean isPermitNotRegisterConnect(){ return permitNotRegisterConnect; } /** * 该方法返回是否终端设备已经再平台注册,如果不允许“未注册设备连接”的话,需要重写该方法,确认设备列表中是否注册有该设备 * @param clientId * @return * @author 时克英 * @date 2018-12-03 */ protected boolean isRegistered(String clientId){ return true; } @Override public boolean isOnlyMatchFeature(){ return false; } }