From fbb64f0b4151a4fefb90191991aa0fba7b26c52a Mon Sep 17 00:00:00 2001
From: zuoxiao <470321431@qq.com>
Date: 星期一, 09 十二月 2024 18:08:59 +0800
Subject: [PATCH] 1.优化MQ相关设置 2.上报问题界面相关

---
 app/src/main/java/com/dayu/pipirrapp/net/MqttManager.java |  169 +++++++++++++++++++++++++------------------------------
 1 files changed, 77 insertions(+), 92 deletions(-)

diff --git a/app/src/main/java/com/dayu/pipirrapp/net/MqttManager.java b/app/src/main/java/com/dayu/pipirrapp/net/MqttManager.java
index 7a85cc5..d669dd5 100644
--- a/app/src/main/java/com/dayu/pipirrapp/net/MqttManager.java
+++ b/app/src/main/java/com/dayu/pipirrapp/net/MqttManager.java
@@ -2,12 +2,14 @@
 
 import android.content.Context;
 import android.net.ConnectivityManager;
-import android.net.Network;
-import android.net.NetworkCapabilities;
-import android.net.NetworkRequest;
 import android.util.Log;
 
+import androidx.lifecycle.LifecycleOwner;
+import androidx.lifecycle.Observer;
+
 import com.dayu.pipirrapp.utils.CommonKeyName;
+import com.dayu.pipirrapp.utils.MyLog;
+import com.dayu.pipirrapp.utils.NetUtils;
 import com.jeremyliao.liveeventbus.LiveEventBus;
 
 import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken;
@@ -31,15 +33,15 @@
 public class MqttManager {
 
     private static final String MQTT_BROKER_URL = "tcp://115.236.153.170:30764"; // 淇敼涓轰綘鐨� broker 鍦板潃
-    private static final String CLIENT_ID = "mqttx_54052fa0";
+    private static final String CLIENT_ID = "mqttx_f62ef124";
     private static final String TOPIC = "workOrder"; // 璁㈤槄鐨勪富棰�
-    private ConnectivityManager connectivityManager;
 
     private MqttClient mqttClient;
     private MqttConnectOptions connectOptions;
-    boolean isHasNet = false;
+    boolean isHasNet = true;
+    private ExecutorService executorService = Executors.newSingleThreadExecutor();
 
-    public MqttManager(Context context) {
+    public MqttManager(Context context, LifecycleOwner lifecycleOwner) {
         try {
             mqttClient = new MqttClient(MQTT_BROKER_URL, CLIENT_ID, new MemoryPersistence());
             connectOptions = new MqttConnectOptions();
@@ -48,8 +50,25 @@
             connectOptions.setCleanSession(false);
             connectOptions.setKeepAliveInterval(60); // 璁剧疆淇濇寔杩炴帴鐨勬椂闂�
             connectOptions.setAutomaticReconnect(true);  // 鍚敤鑷姩閲嶈繛
-            connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
-            checkNetwork();
+            LiveEventBus.get(CommonKeyName.NetworkCallback).observe(lifecycleOwner, new Observer<Object>() {
+                @Override
+                public void onChanged(Object o) {
+                    if (o instanceof Integer) {
+                        switch ((int) o) {
+                            case NetUtils.Available:
+                                MyLog.i("MqttManager>>>Available");
+                                isHasNet = true;
+                                reconnect();
+                                break;
+                            case NetUtils.Lost:
+                                MyLog.i("MqttManager>>>Lost");
+                                isHasNet = false;
+                                disconnect();
+                                break;
+                        }
+                    }
+                }
+            });
         } catch (MqttException e) {
             e.printStackTrace();
         }
@@ -57,16 +76,43 @@
 
     // 杩炴帴鍒� MQTT broker
     public void connect() {
-        ExecutorService executorService = Executors.newSingleThreadExecutor();
         executorService.execute(new Runnable() {
             @Override
             public void run() {
                 try {
+                    Log.d("MqttManager", "connect寮�濮嬭繛鎺sHasNet:" + isHasNet);
                     if (isHasNet) {
+                        Log.d("MqttManager", "connect寮�濮嬭繛鎺�");
+                        mqttClient.setCallback(new MqttCallback() {
+                            @Override
+                            public void connectionLost(Throwable cause) {
+                                Log.d("MqttManager", "杩炴帴涓㈠け锛�" + cause.getMessage());
+                                // 澶勭悊杩炴帴涓㈠け锛屽彲浠ュ皾璇曢噸鏂拌繛鎺�
+                                reconnect();
+                            }
+
+                            @Override
+                            public void messageArrived(String topic, MqttMessage message) throws Exception {
+                                Log.d("MqttManager", "鏀跺埌鐨勬秷:" + new String(message.getPayload()));
+                                // 澶勭悊鏀跺埌鐨勬秷鎭�
+                            }
+
+                            @Override
+                            public void deliveryComplete(IMqttDeliveryToken token) {
+                                // 澶勭悊娑堟伅鍙戦�佸畬鎴�
+                                try {
+                                    Log.d("MqttManager", "鍙戦�佸畬鎴愶細" + new String(token.getMessage().toString()));
+                                } catch (MqttException e) {
+                                    e.printStackTrace();
+                                }
+                            }
+                        });
                         mqttClient.connect(connectOptions);
                         if (mqttClient.isConnected()) {
-                            Log.d("MqttManager", "Connected to MQTT broker");
+                            Log.d("MqttManager", "connect杩炴帴鎴愬姛");
                             subscribeToTopic();
+                        } else {
+                            Log.d("MqttManager", "connect杩炴帴澶辫触");
                         }
                     } else {
                         reconnect();
@@ -85,34 +131,11 @@
         try {
             mqttClient.subscribe(TOPIC, (topic, message) -> {
                 // 鏀跺埌娑堟伅鏃剁殑澶勭悊閫昏緫
-                Log.d("MqttManager", "Received message:" + new String(message.getPayload()));
+                Log.d("MqttManager", "鏀跺埌娑堟伅锛�" + new String(message.getPayload()));
                 //浼犻�扢Q鏀跺埌鐨勪俊鎭�
                 LiveEventBus.get(CommonKeyName.locationData).post(message.getPayload());
             });
-            mqttClient.setCallback(new MqttCallback() {
-                @Override
-                public void connectionLost(Throwable cause) {
-                    Log.d("MqttManager", "connectionLost" + cause.getMessage());
-                    reconnect();
-                    // 澶勭悊杩炴帴涓㈠け锛屽彲浠ュ皾璇曢噸鏂拌繛鎺�
-                }
 
-                @Override
-                public void messageArrived(String topic, MqttMessage message) throws Exception {
-                    Log.d("MqttManager", "Received messageArrived:" + new String(message.getPayload()));
-                    // 澶勭悊鏀跺埌鐨勬秷鎭�
-                }
-
-                @Override
-                public void deliveryComplete(IMqttDeliveryToken token) {
-                    // 澶勭悊娑堟伅鍙戦�佸畬鎴�
-                    try {
-                        Log.d("MqttManager", "deliveryComplete锛�" + new String(token.getMessage().toString()));
-                    } catch (MqttException e) {
-                        e.printStackTrace();
-                    }
-                }
-            });
         } catch (MqttException e) {
             e.printStackTrace();
         }
@@ -130,10 +153,11 @@
 
     // 鏂紑杩炴帴
     public void disconnect() {
+        MyLog.d("MqttManager>>>>鍏抽棴杩炴帴");
         try {
             if (mqttClient != null && mqttClient.isConnected()) {
                 mqttClient.disconnect();
-                System.out.println("Disconnected from MQTT broker");
+                MyLog.d("MqttManager>>>>鍏抽棴杩炴帴鎴愬姛");
             }
         } catch (MqttException e) {
             e.printStackTrace();
@@ -142,61 +166,22 @@
 
     // 鑷姩閲嶈繛鏂规硶
     private void reconnect() {
-        try {
-            if (isHasNet) {
-                while (!mqttClient.isConnected() && isHasNet) {
-                    Log.d("MqttManager", "Attempting to reconnect...");
-                    mqttClient.connect(connectOptions);  // 閲嶈瘯杩炴帴
-                    if (mqttClient.isConnected()) {
-                        Log.d("MqttManager", "Connected to MQTT broker");
-                        subscribeToTopic();
-                    }
-                    Thread.sleep(5000);     // 姣� 5 绉掗噸璇曚竴娆�
-                }
-                Log.d("MqttManager", "Reconnected to MQTT broker! isHasNet=true");
-            } else {
-                Log.d("MqttManager", "isHasNet is false");
-                Thread.sleep(5000);
-                reconnect();
-            }
-
-        } catch (MqttException | InterruptedException e) {
-            try {
-                Thread.sleep(5000);
-            } catch (InterruptedException ex) {
-                e.printStackTrace();
-            }// 姣� 5 绉掗噸璇曚竴娆�
-            reconnect();
-
-        }
-    }
-
-    public void checkNetwork() {
-        NetworkRequest request = new NetworkRequest.Builder().addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)  // 蹇呴』鍏峰浜掕仈缃戣兘鍔�
-                .build();
-
-        connectivityManager.registerNetworkCallback(request, new ConnectivityManager.NetworkCallback() {
-            @Override
-            public void onAvailable(Network network) {
-                super.onAvailable(network);
-                // 缃戠粶鍙敤鏃剁殑澶勭悊閫昏緫
-                Log.d("MqttManager", "Network is available.");
-                isHasNet = true;
-                reconnect();
-            }
-
-            @Override
-            public void onLost(Network network) {
-                super.onLost(network);
-                // 缃戠粶涓㈠け鏃剁殑澶勭悊閫昏緫
-                Log.d("MqttManager", "Network is lost.");
-                isHasNet = false;
-                try {
-                    mqttClient.disconnect();
-                } catch (MqttException e) {
-                    e.printStackTrace();
-                }
-            }
-        });
+//        executorService.execute(() -> {
+//            try {
+//                MyLog.d("MqttManager>>>>寮�濮嬮噸杩�+isHasNet:" + isHasNet + ">>>mqttClient.isConnected():" + mqttClient.isConnected());
+//                while (!mqttClient.isConnected() && isHasNet) {
+//                    MyLog.d("MqttManager>>>>寮�濮嬭繛鎺�");
+//                    mqttClient.connect(connectOptions);
+//                    if (mqttClient.isConnected()) {
+//                        MyLog.d("MqttManager>>>杩炴帴鎴愬姛");
+//                        subscribeToTopic();
+//                        break;
+//                    }
+//                    Thread.sleep(5000);  // 姣�5绉掗噸璇曚竴娆�
+//                }
+//            } catch (MqttException | InterruptedException e) {
+//                MyLog.e("MqttManager>>>Reconnection failed" + e.toString());
+//            }
+//        });
     }
 }

--
Gitblit v1.8.0