mac
2023-12-01 593303fa91fd541844b204ec913c462d7855a31e
HDLLinkLocalSdk/src/main/java/com/hdl/sdk/link/core/connect/HDLModBusConnect.java
@@ -25,7 +25,7 @@
 */
public class HDLModBusConnect {
    private static final String TAG="HDLModbusConnect";
    private static final String TAG = "HDLModbusConnect";
    private static HDLModBusConnect instance;
    /**
     * 内部用,主要是处理处理掉透传主题及link主题后,还原modbus原生数据及主题用
@@ -51,7 +51,7 @@
     * @param eventListener
     */
    public void registerListener(EventListener eventListener) {
        if(null==eventListener){
        if (null == eventListener) {
            return;
        }
        EventDispatcher.getInstance().register(allTopic, eventListener);
@@ -63,7 +63,7 @@
     * @param eventListener
     */
    public void removeListener(EventListener eventListener) {
        if(null==eventListener){
        if (null == eventListener) {
            return;
        }
        EventDispatcher.getInstance().remove(allTopic, eventListener);
@@ -79,13 +79,13 @@
                try {
                    if (msg instanceof LinkResponse) {
                        LinkResponse linkResponse = (LinkResponse) msg;
                        if(linkResponse.getTopic()==null||!linkResponse.getTopic().contains("custom/native/inverter/"))
                        {
                        if (linkResponse.getTopic() == null || !linkResponse.getTopic().contains("custom/native/inverter/up")) {
                            return;
                        }
                        byte []data = linkResponse.getByteData();
                        ModbusResponse  modbusResponse= new ModbusResponse();
                        modbusResponse.setTopic("Modbus"+data[0]+data[1]);
                        byte[] data = linkResponse.getByteData();
                        ModbusResponse modbusResponse = new ModbusResponse();
                        String topic = "Modbus" + data[0] + data[1];
                        modbusResponse.setTopic(topic);
                        modbusResponse.setData(data);
                        String oid = null;
                        //是否是通过主网关透传主题
@@ -102,20 +102,20 @@
                                break;
                            }
                        }
                        EventDispatcher.getInstance().post(allTopic, modbusResponse);
                        EventDispatcher.getInstance().post(topic, modbusResponse);
                        //发布Zigbee原生主题及数据
//                        EventDispatcher.getInstance().post(allTopic, zigbeeResponse);
//                        EventDispatcher.getInstance().post(allTopic, modbusResponse);
                    }
                } catch (Exception e) {
                    LogUtils.e(TAG,"LinkResponse转ModbusResponse异常:"+ e.getMessage());
                    LogUtils.e(TAG, "LinkResponse转ModbusResponse异常:" + e.getMessage());
                }
            }
        };
        //注册直接通讯的主题,包括直接和主网关通讯或者直接和从网关通讯
        registerListener(String.format(TopicConstant.NATIVE_MODBUS_UP, "+"), eventListener);
        registerListener(String.format(TopicConstant.NATIVE_MODBUS_DOWN_REPLY, "+"), eventListener);
        //        registerListener(String.format(TopicConstant.NATIVE_ZIGBEE_UP_SLAVE, "+", "+"), eventListener);
        //registerListener(String.format(TopicConstant.NATIVE_MODBUS_DOWN_REPLY, "+"), eventListener);
        //registerListener(String.format(TopicConstant.NATIVE_ZIGBEE_UP_SLAVE, "+", "+"), eventListener);
    }
    /**
@@ -123,9 +123,9 @@
     *
     * @param gatewayOidOrGatewayId 目标网关的oid或者网关Id
     * @param payload               发送数据
     * @param baseCallBack        结果回调
     * @param baseCallBack          结果回调
     */
    public void Send(String gatewayOidOrGatewayId, byte []payload, final ModbusCallBack baseCallBack) {
    public void Send(String gatewayOidOrGatewayId, byte[] payload, final ModbusCallBack baseCallBack) {
        //如果本地有链接这个网关,则用本地连接
        GatewayBean gatewayBean = HDLLinkLocalGateway.getInstance().getGatewayByOidOrGatewayId(gatewayOidOrGatewayId);
        if (null == gatewayBean) {
@@ -139,23 +139,23 @@
        String tempTopic = String.format(TopicConstant.NATIVE_MODBUS_DOWN, gatewayOidOrGatewayId);
        LinkRequest request = new LinkRequest(tempTopic, payload, gatewayBean.getIsLocalEncrypt());
        if ("true".equals(gatewayBean.getMaster())) {
            request.setCloudTopic(String.format(TopicConstant.NATIVE_MODBUS_DOWN, HDLLinkConfig.getInstance().getGatewayId()));
        } else {
            request.setCloudTopic(String.format(TopicConstant.NATIVE_MODBUS_DOWN_SLAVE, HDLLinkConfig.getInstance().getGatewayId(), gatewayOidOrGatewayId));
        }
        request.setReplyTopic("Modbus"+payload[0]+payload[1]);
        long timeout = 2 * 1000;
//        if ("true".equals(gatewayBean.getMaster())) {
        request.setCloudTopic(String.format(TopicConstant.NATIVE_MODBUS_DOWN, HDLLinkConfig.getInstance().getGatewayId()));
//        } else {
//            request.setCloudTopic(String.format(TopicConstant.NATIVE_MODBUS_DOWN_SLAVE, HDLLinkConfig.getInstance().getGatewayId(), gatewayOidOrGatewayId));
//        }
        request.setReplyTopic("Modbus" + payload[0] + payload[1]);
        long timeout = 5 * 1000;
        new HDLConnectHelper(timeout, 1, gatewayBean.getIp_address(), 8586, request, new HDLConnectHelper.HdlSocketListener() {
            @Override
            public void onSucceed(Object msg) {
                if (msg instanceof Byte[]) {
                if (msg instanceof int[]) {
                    if (null != baseCallBack) {
                        baseCallBack.onSuccess((byte[])msg);
                        baseCallBack.onSuccess((int[]) msg);
                    }
                }else{
                    LogUtils.e("发送Modbus回调对象类型非数组类型,类型是"+msg.getClass());
                } else {
                    LogUtils.e("发送Modbus回调对象类型非数组类型,类型是" + msg.getClass());
                }
            }
@@ -167,7 +167,6 @@
            }
        }, true).send();
    }
    /**
@@ -257,12 +256,12 @@
    /**
     * 处理zigbee回复的数据
     *
     * @param responeTopic   回复主题
     * @param linkResponse   回复的透传数据
     * @param responeTopic 回复主题
     * @param linkResponse 回复的透传数据
     */
    private static String getZigbeeData(String responeTopic, LinkResponse linkResponse) {
        //主题为空不处理
        if(TextUtils.isEmpty(responeTopic)){
        if (TextUtils.isEmpty(responeTopic)) {
            return null;
        }