From 5f4c3669ddd8fe27449b04a4b9db12b2ca4b3688 Mon Sep 17 00:00:00 2001
From: zuoxiao <470321431@qq.com>
Date: 星期二, 14 一月 2025 16:27:29 +0800
Subject: [PATCH] 1.文件上传和显示添加缩略图功能。

---
 app/src/main/java/com/dayu/pipirrapp/net/MqttManager.java |  133 +++++++++++++++++++++++++++----------------
 1 files changed, 83 insertions(+), 50 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 ec1c035..3902e86 100644
--- a/app/src/main/java/com/dayu/pipirrapp/net/MqttManager.java
+++ b/app/src/main/java/com/dayu/pipirrapp/net/MqttManager.java
@@ -1,12 +1,16 @@
 package com.dayu.pipirrapp.net;
 
 import android.content.Context;
+import android.content.pm.PackageInfo;
+import android.content.pm.PackageManager;
 import android.util.Log;
 
 import androidx.lifecycle.LifecycleOwner;
 import androidx.lifecycle.Observer;
 
+import com.dayu.pipirrapp.MyApplication;
 import com.dayu.pipirrapp.utils.CommonKeyName;
+import com.dayu.pipirrapp.utils.MyJsonParser;
 import com.dayu.pipirrapp.utils.MyLog;
 import com.dayu.pipirrapp.utils.NetUtils;
 import com.jeremyliao.liveeventbus.LiveEventBus;
@@ -19,6 +23,8 @@
 import org.eclipse.paho.client.mqttv3.MqttMessage;
 import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;
 
+import java.util.HashMap;
+import java.util.UUID;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 
@@ -31,18 +37,28 @@
  */
 public class MqttManager {
 
-//    private static final String MQTT_BROKER_URL = "tcp://115.236.153.170:30764"; // 淇敼涓轰綘鐨� broker 鍦板潃
-private static final String MQTT_BROKER_URL = "tcp://192.168.10.52:1883";
-    private static final String CLIENT_ID = "mqttx_a7a9fe73";
+    //    private static final String MQTT_BROKER_URL = "tcp://115.236.153.170:30764"; // 淇敼涓轰綘鐨� broker 鍦板潃
+    private static final String MQTT_BROKER_URL = "tcp://192.168.10.52:1883";
+    private String CLIENT_ID = "mqttx_a7a9fe73";
     private static final String TOPIC = "workOrder"; // 璁㈤槄鐨勪富棰�
 
     private MqttClient mqttClient;
     private MqttConnectOptions connectOptions;
     boolean isHasNet = true;
-    private ExecutorService executorService = Executors.newSingleThreadExecutor();
+    //鏄惁杩炴帴鎴愬姛杩囦竴娆★紝娌℃湁鐨勮瘽鑱旂綉鍚庨噸杩�
+    boolean isConnet = false;
+    private final ExecutorService executorService = Executors.newSingleThreadExecutor();
 
     public MqttManager(Context context, LifecycleOwner lifecycleOwner) {
         try {
+            PackageManager manager = context.getPackageManager();
+            PackageInfo info = null;
+            try {
+                info = manager.getPackageInfo(context.getPackageName(), 0);
+            } catch (PackageManager.NameNotFoundException e) {
+                throw new RuntimeException(e);
+            }
+            CLIENT_ID = context.getPackageName() + UUID.randomUUID().toString().replace("-", "") + "_" + info;
             mqttClient = new MqttClient(MQTT_BROKER_URL, CLIENT_ID, new MemoryPersistence());
             connectOptions = new MqttConnectOptions();
             connectOptions.setUserName("mqtt_yjy");
@@ -50,6 +66,31 @@
             connectOptions.setCleanSession(false);
             connectOptions.setKeepAliveInterval(60); // 璁剧疆淇濇寔杩炴帴鐨勬椂闂�
             connectOptions.setAutomaticReconnect(true);  // 鍚敤鑷姩閲嶈繛
+            connectOptions.setConnectionTimeout(30);// 璁剧疆杩炴帴瓒呮椂鏃堕棿锛屽崟浣嶄负绉�
+            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", "messageArrived鏀跺埌鐨勬秷:" + new String(message.getPayload()));
+                    // 澶勭悊鏀跺埌鐨勬秷鎭�
+                }
+
+                @Override
+                public void deliveryComplete(IMqttDeliveryToken token) {
+                    // 澶勭悊娑堟伅鍙戦�佸畬鎴�
+                    try {
+                        Log.d("MqttManager", "鍙戦�佸畬鎴愶細" + new String(token.getMessage().toString()));
+                    } catch (MqttException e) {
+                        e.printStackTrace();
+                    }
+                }
+            });
             LiveEventBus.get(CommonKeyName.NetworkCallback).observe(lifecycleOwner, new Observer<Object>() {
                 @Override
                 public void onChanged(Object o) {
@@ -58,12 +99,14 @@
                             case NetUtils.Available:
                                 MyLog.i("MqttManager>>>Available");
                                 isHasNet = true;
-                                reconnect();
+                                if (!isConnet) {
+                                    reconnect();
+                                }
                                 break;
                             case NetUtils.Lost:
                                 MyLog.i("MqttManager>>>Lost");
                                 isHasNet = false;
-                                disconnect();
+//                                disconnect();
                                 break;
                         }
                     }
@@ -83,30 +126,6 @@
                     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", "connect杩炴帴鎴愬姛");
@@ -129,11 +148,16 @@
     // 璁㈤槄涓婚
     private void subscribeToTopic() {
         try {
+            isConnet = true;
             mqttClient.subscribe(TOPIC, (topic, message) -> {
-                // 鏀跺埌娑堟伅鏃剁殑澶勭悊閫昏緫
-                Log.d("MqttManager", "鏀跺埌娑堟伅锛�" + new String(message.getPayload()));
+                // 鍦ㄥ瓙绾跨▼鏀跺埌娑堟伅鏃剁殑澶勭悊閫昏緫
+                Log.d("MqttManager", "subscribe鏀跺埌娑堟伅锛�" + new String(message.getPayload()));
                 //浼犻�扢Q鏀跺埌鐨勪俊鎭�
-                LiveEventBus.get(CommonKeyName.locationData).post(message.getPayload());
+                HashMap<String, Object> data = MyJsonParser.getMapFromJson(new String(message.getPayload()));
+                //鍒ゆ柇鏄惁鏄綋鍓嶇敤鎴�
+                if (data.get("inspectorId").equals(MyApplication.myApplication.userId)) {
+                    LiveEventBus.get(CommonKeyName.MQTTData).post(data.get("workOrderId"));
+                }
             });
 
         } catch (MqttException e) {
@@ -161,27 +185,36 @@
             }
         } catch (MqttException e) {
             e.printStackTrace();
+        } finally {
+            executorService.shutdown();
         }
     }
 
     // 鑷姩閲嶈繛鏂规硶
     private void reconnect() {
-//        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());
-//            }
-//        });
+        executorService.execute(() -> {
+            int reconnectAttempts = 0;
+            while (!mqttClient.isConnected() && isHasNet) {
+                try {
+                    MyLog.d("MqttManager>>>>寮�濮嬮噸杩�");
+                    mqttClient.connect(connectOptions);
+                    if (mqttClient.isConnected()) {
+                        MyLog.d("MqttManager>>>杩炴帴鎴愬姛");
+                        subscribeToTopic();
+                        break;
+                    }
+                    // 鎸囨暟閫�閬�
+                    long backoff = Math.min((1L << reconnectAttempts) * 1000, 30000);
+                    Thread.sleep(backoff);
+                    reconnectAttempts++;
+                } catch (MqttException e) {
+                    MyLog.e("MqttManager>>>Reconnection failed" + e.getMessage());
+                    // 鍙互鍦ㄨ繖閲屽鍔犻噸杩炲皾璇曟鏁扮殑闄愬埗
+                } catch (InterruptedException e) {
+                    Thread.currentThread().interrupt(); // 淇濈暀涓柇鐘舵��
+                    return;
+                }
+            }
+        });
     }
 }

--
Gitblit v1.8.0