“虞渠成” e11d67df32 feat: 为多处UI交互添加防连点重入逻辑
1.  为WiFi配置、固件升级、设备信息页的多个设置页面添加防重复点击逻辑
2.  为定时任务、FOV/镜头/灯光/安全设置、消息页等主页功能添加防连点
3.  新增锁定指令、WiFi配置发送的状态标记避免重复触发
4.  所有页面打开时检查实例状态,避免重复创建页面实例
2026-08-14 08:35:38 +08:00

144 lines
5.6 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System.Collections;
using System.Collections.Generic;
using Kill.Bluetooth;
using Kill.Core;
using Kill.Managers;
using Kill.UI.Components;
using UnityEngine;
using UnityEngine.UI;
using ZXing.Datamatrix;
namespace Kill.UI.Pages
{
public class AboutDevicePage : MonoBehaviour
{
public Text[] infoTexts; // 0:设备型号 1id 2sn 3mac 4固件版本 5wifi
public Button backButton;
public Button wifiButton;
public SetWifiPage setWifiPage;
public Button firmwareUpdateButton;
public FirmwareUpdatePage firmwareUpdatePage;
void Start()
{
UIManager.Instance.RegisterBackAction(Back);
backButton.onClick.RemoveAllListeners();
backButton.onClick.AddListener(Back);
wifiButton.onClick.RemoveAllListeners();
wifiButton.onClick.AddListener(OnWifiButtonClick);
firmwareUpdateButton.onClick.RemoveAllListeners();
firmwareUpdateButton.onClick.AddListener(OnFirmwareUpdateButtonClick);
if (BluetoothManager.Instance.IsConnected)
{
StartCoroutine(GetAllInfoByBlueTooth());
}
else
{
infoTexts[0].text = DataManager.Instance.selectedDevice.device_model;
infoTexts[1].text = DataManager.Instance.selectedDevice.product_id;
infoTexts[2].text = DataManager.Instance.selectedDevice.device_sn;;
infoTexts[3].text = DataManager.Instance.selectedDevice.ble_mac;
infoTexts[4].text = DataManager.Instance.selectedDevice.firmware_version;
// WiFi模式从设备配置获取WiFi名称
var config = DataManager.Instance.deviceConfig;
infoTexts[5].text = config?.wifi_ssid ?? "";
}
}
bool deviceInfoReceived = false;
bool wifiInfoReceived = false;
IEnumerator GetAllInfoByBlueTooth()
{
deviceInfoReceived = false;
wifiInfoReceived = false;
LoadingUI.Show();
GetDeviceInfoByBlueTooth();
while (!deviceInfoReceived)
{
yield return new WaitForEndOfFrame();
}
yield return new WaitForSeconds(0.2f); // 等待0.5秒再请求WiFi信息确保蓝牙通信稳定
GetWifiInfoByBlueTooth();
while (!wifiInfoReceived)
{
yield return new WaitForEndOfFrame();
}
LoadingUI.Hide();
}
public void GetDeviceInfoByBlueTooth()
{
BLECommunicationManager.Instance.ReadDeviceInfo((info) =>
{
Loom.QueueOnMainThread(() =>
{
deviceInfoReceived = true;
infoTexts[0].text = info.GetDeviceModelString();
infoTexts[1].text = info.GetDeviceIdString();
infoTexts[2].text = info.GetSerialNumberString();
infoTexts[3].text = info.GetBleMacAddressString();
infoTexts[4].text = info.GetFirmwareVersionString();
DataManager.Instance.selectedDevice.firmware_version = info.GetFirmwareVersionString();
});
});
}
public void GetWifiInfoByBlueTooth()
{
BLECommunicationManager.Instance.ReadWIFIControl((info) =>
{
Loom.QueueOnMainThread(() =>
{
wifiInfoReceived = true;
infoTexts[5].text = info.SSID;
infoTexts[5].GetComponentInParent<Button>().interactable = true;
});
});
}
public void InitInfoByOnlineData()
{
infoTexts[0].text = DataManager.Instance.selectedDevice.device_model;
infoTexts[1].text = DataManager.Instance.selectedDevice.product_id;
infoTexts[2].text = DataManager.Instance.selectedDevice.device_sn;
infoTexts[3].text = DataManager.Instance.selectedDevice.ble_mac;
infoTexts[4].text = DataManager.Instance.selectedDevice.firmware_version;
infoTexts[5].text ="";
}
public void Back()
{
UIManager.Instance.RegisterBackAction(GetComponentInParent<DeviceInfoPage>().Back);
Destroy(gameObject);
}
/// <summary>当前已打开的WiFi设置页实例(防连点重入)</summary>
private SetWifiPage currentWifiPage;
public void OnWifiButtonClick()
{
// WiFi模式下不支持设置WiFi
if (DataManager.Instance.hasWifi && !DataManager.Instance.hasBluetooth)
{
ToastUI.Show("100293");
return;
}
// 防连点:页面已打开时忽略重复触发
if (currentWifiPage != null) return;
currentWifiPage=Instantiate(setWifiPage, transform);
currentWifiPage.gameObject.SetActive(true);
currentWifiPage.Init(WIfiCallback);
}
public void WIfiCallback(string ssid)
{
infoTexts[5].text = ssid;
}
/// <summary>当前已打开的固件更新页实例(防连点重入)</summary>
private FirmwareUpdatePage currentFirmwareUpdatePage;
public void OnFirmwareUpdateButtonClick()
{
// 防连点:页面已打开时忽略重复触发
if (currentFirmwareUpdatePage != null) return;
currentFirmwareUpdatePage = Instantiate(firmwareUpdatePage, transform);
currentFirmwareUpdatePage.gameObject.SetActive(true);
}
}
}