From dc8ae12444d1d887394eb525e2b80dd120dc4c87 Mon Sep 17 00:00:00 2001
From: mac <user@users-MacBook-Pro.local>
Date: 星期二, 20 二月 2024 13:43:56 +0800
Subject: [PATCH] Merge branch 'wjc' into dev-hxb

---
 app/src/main/java/com/hdl/photovoltaic/ui/test/UniAppMqtt.java |  274 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 274 insertions(+), 0 deletions(-)

diff --git a/app/src/main/java/com/hdl/photovoltaic/ui/test/UniAppMqtt.java b/app/src/main/java/com/hdl/photovoltaic/ui/test/UniAppMqtt.java
new file mode 100644
index 0000000..ffc2f8d
--- /dev/null
+++ b/app/src/main/java/com/hdl/photovoltaic/ui/test/UniAppMqtt.java
@@ -0,0 +1,274 @@
+package com.hdl.photovoltaic.ui.test;
+
+import android.content.Context;
+import android.os.Build;
+
+import androidx.annotation.RequiresApi;
+
+import com.alibaba.fastjson.JSON;
+import com.hdl.photovoltaic.other.HdlUniLogic;
+import com.hdl.photovoltaic.uni.HDLUniMP;
+import com.hdl.sdk.link.common.utils.LogUtils;
+import com.hdl.sdk.link.core.config.HDLLinkConfig;
+
+import org.eclipse.paho.android.service.MqttAndroidClient;
+import org.eclipse.paho.client.mqttv3.IMqttActionListener;
+import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken;
+import org.eclipse.paho.client.mqttv3.IMqttToken;
+import org.eclipse.paho.client.mqttv3.MqttCallbackExtended;
+import org.eclipse.paho.client.mqttv3.MqttConnectOptions;
+import org.eclipse.paho.client.mqttv3.MqttException;
+import org.eclipse.paho.client.mqttv3.MqttMessage;
+
+
+/**
+ * Created by hxb on 2022/1/6.
+ */
+public class UniAppMqtt {
+
+    private String clientId;
+
+    /**
+     * 鑾峰彇鏍囪瘑mqtt鐨則ag鍊�
+     *
+     * @return -
+     */
+    public String getClientId() {
+        return clientId;
+    }
+
+    final String tag = "uniToAndroid->>>MqttRecvClient--->";
+    /**
+     * 褰撳墠 mqtt client
+     */
+    MqttAndroidClient mClient;
+
+    /**
+     * instance
+     */
+    private volatile static UniAppMqtt instance;
+
+    /**
+     * getInstance
+     *
+     * @return UniAppMqtt
+     */
+    public static synchronized UniAppMqtt getInstance() {
+        if (instance == null) {
+            synchronized (HDLLinkConfig.class) {
+                if (instance == null) {
+                    instance = new UniAppMqtt();
+                }
+            }
+        }
+        return instance;
+    }
+
+    /**
+     * 鍒濆鍖栧綋鍓峬qtt
+     *
+     * @param context   涓婁笅鏂�
+     * @param serverURI 鍦板潃锛屾牸寮弔cp://127.0.0.1:1883
+     * @param clientId  瀹㈡埛绔疘d
+     * @param topics    涓婚
+     */
+    public void initMqtt(Context context, String serverURI, String clientId, String[] topics) throws MqttException {
+        if (null != mClient) {
+            return;
+        }
+        this.clientId = clientId;
+        mClient = new MqttAndroidClient(context, serverURI, clientId);
+
+        mClient.setCallback(new MqttCallbackExtended() {
+
+            @Override
+            public void connectComplete(boolean reconnect, String serverURI) {
+                for (String topic : topics) {
+                    try {
+                        subscribe(topic);
+                    } catch (MqttException e) {
+                        LogUtils.e(tag, "璁㈤槄涓婚澶辫触" + topic);
+                    }
+                }
+            }
+
+            @Override
+            public void connectionLost(Throwable cause) {
+                LogUtils.e(tag, "娴嬭瘯mqtt鏂紑");
+            }
+
+            @Override
+            public void messageArrived(String topic, MqttMessage message) {
+                //Topic鏍煎紡   PCToAndroid(鎴朅ndroidToPC)/#guid鍞竴鍊�/uni_event
+                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
+                    sendMqttToUni(topic, new String(message.getPayload()));
+                }
+            }
+
+            @Override
+            public void deliveryComplete(IMqttDeliveryToken token) {
+//                LogUtils.i(tag,"鍙戝竷娑堟伅鎴愬姛");
+            }
+        });
+        //閰嶇疆杩炴帴
+        MqttConnectOptions options = new MqttConnectOptions();
+        options.setCleanSession(true);
+        //鏈嶅姟绔厑璁稿尶鍚�
+//        options.setUserName("username");
+//        options.setPassword("password".toCharArray());
+        options.setAutomaticReconnect(true);
+
+//        //閰嶇疆瀹㈡埛绔绾挎垨鑰呮柇寮�杩炴帴鐨勯�夐」
+//        DisconnectedBufferOptions disconnectedBufferOptions = new DisconnectedBufferOptions();
+//        disconnectedBufferOptions.setBufferEnabled(true);
+//        disconnectedBufferOptions.setBufferSize(5000);
+//        disconnectedBufferOptions.setDeleteOldestMessages(true);
+//        disconnectedBufferOptions.setPersistBuffer(true);
+//        mClient.setBufferOpts(disconnectedBufferOptions);
+        connect(options);
+    }
+
+
+    /**
+     * 杩炴帴mqtt
+     *
+     * @param options -
+     */
+    private void connect(MqttConnectOptions options) throws MqttException {
+        try {
+            mClient.connect(options, new IMqttActionListener() {
+                @Override
+                public void onSuccess(IMqttToken asyncActionToken) {
+                    LogUtils.i(tag, "mqtt杩炴帴鎴愬姛");
+                }
+
+                @Override
+                public void onFailure(IMqttToken asyncActionToken, Throwable exception) {
+                    LogUtils.e(tag, "mqtt杩炴帴澶辫触" + JSON.toJSONString(asyncActionToken.getException().getMessage()) + "  exception=" + JSON.toJSONString(exception.getMessage()));
+                }
+            });
+        } catch (MqttException e) {
+            LogUtils.e(tag, e.getMessage());
+        }
+    }
+
+    /**
+     * 璁㈤槄涓婚
+     *
+     * @param topic 涓婚
+     */
+    public void subscribe(String topic) throws MqttException {
+        mClient.subscribe(topic, 2, null, new IMqttActionListener() {
+            @Override
+            public void onSuccess(IMqttToken asyncActionToken) {
+                LogUtils.i(tag, "璁㈤槄涓婚" + topic);
+            }
+
+            @Override
+            public void onFailure(IMqttToken asyncActionToken, Throwable exception) {
+                LogUtils.e(tag, "璁㈤槄涓婚澶辫触" + topic);
+            }
+        });
+    }
+
+    /**
+     * 鍙戝竷鏁版嵁鍑哄幓
+     *
+     * @param topic   涓婚
+     * @param payload 鍐呭
+     */
+    public void publish(String topic, String payload) throws MqttException {
+
+        //鍥炲鏃讹紝mqtt涓婚涓殑鏂瑰悜瑕佸彉鍖栵紝瑕佸仛鏂瑰悜鏇挎崲
+        topic = topic.replace("PCToAndroid", "AndroidToPC");
+        String finalTopic = topic;
+        mClient.publish(topic, payload.getBytes(), 1, false, null, new IMqttActionListener() {
+            @Override
+            public void onSuccess(IMqttToken asyncActionToken) {
+                LogUtils.e(tag, "鍥炲涓婚--->" + finalTopic + "\r\n" + payload);
+            }
+
+            @Override
+            public void onFailure(IMqttToken asyncActionToken, Throwable exception) {
+                LogUtils.e(tag, "鍥炲澶辫触--->" + finalTopic + "\r\n" + exception.getMessage());
+            }
+        });
+    }
+
+    /**
+     * 鍙栨秷璁㈤槄
+     */
+    public void unsubscribe(String topic) throws MqttException {
+        mClient.unsubscribe(topic, null, new IMqttActionListener() {
+            @Override
+            public void onSuccess(IMqttToken asyncActionToken) {
+
+            }
+
+            @Override
+            public void onFailure(IMqttToken asyncActionToken, Throwable exception) {
+
+            }
+        });
+    }
+
+    /**
+     * 鏂紑杩炴帴
+     */
+    public void disconnect() throws MqttException {
+        mClient.disconnect(null, new IMqttActionListener() {
+            @Override
+            public void onSuccess(IMqttToken asyncActionToken) {
+                LogUtils.e(tag, "鏂紑杩炴帴");
+            }
+
+            @Override
+            public void onFailure(IMqttToken asyncActionToken, Throwable exception) {
+
+            }
+        });
+    }
+
+    /**
+     * uni閫氳繃qtt浼犺繃鏉ョ殑鏁版嵁澶勭悊
+     *
+     * @param topic   涓婚
+     * @param payload 璐熻浇鍐呭
+     */
+    @RequiresApi(api = Build.VERSION_CODES.O)
+    void sendMqttToUni(final String topic, String payload) {
+        if (null == topic || null == payload) {
+            return;
+        }
+        String[] split = topic.split("/");
+        if (split.length < 3) {
+            return;
+        }
+        //琛ㄧず澶х被
+        String request_module_topic = split[2];
+        MqttDCUniMPJSCallback mqttDCUniMPJSCallback = new MqttDCUniMPJSCallback();
+        mqttDCUniMPJSCallback.setMqttCallBack(new MqttCallBack() {
+            @Override
+            public void onResult(Object data) {
+                if (null != data)
+                    try {
+                        //杩斿洖鏁版嵁缁檜ni
+                        publish(topic, data.toString());
+                    } catch (Exception ignored) {
+                    }
+            }
+        });
+        // JSON.parse(payload)
+        HdlUniLogic.getInstance().onOtherUniMPEventReceive(HDLUniMP.UNI_APP_ID, request_module_topic, payload, mqttDCUniMPJSCallback);
+    }
+
+    private boolean mIsUni = false;
+
+    public void setUni(boolean isUni) {
+        mIsUni = isUni;
+    }
+
+    public boolean getUni() {
+        return mIsUni;
+    }
+}

--
Gitblit v1.8.0