DCS/ruiyiweiUX/Assets/Scripts/Managers/CrossPlatformNetworkManager.cs

413 lines
14 KiB
C#
Raw Permalink Normal View History

2026-06-09 13:59:11 +08:00
// using System;
// using UnityEngine;
// using System.Collections;
// using System.Net.NetworkInformation;
// using System.Net;
// /// <summary>
// /// 跨平台网络管理器
// /// 支持 Windows、Android 等平台的网络功能
// /// </summary>
// public static class CrossPlatformNetworkManager
// {
// #if UNITY_ANDROID && !UNITY_EDITOR
// #region Android 网络实现
// private static AndroidJavaClass _unityPlayer;
// private static AndroidJavaObject _currentActivity;
// private static AndroidJavaObject _connectivityManager;
// private static AndroidJavaObject _wifiManager;
// /// <summary>
// /// 初始化Android网络管理
// /// </summary>
// static CrossPlatformNetworkManager()
// {
// try
// {
// _unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
// _currentActivity = _unityPlayer.GetStatic<AndroidJavaObject>("currentActivity");
// // 获取ConnectivityManager
// _connectivityManager = _currentActivity.Call<AndroidJavaObject>("getSystemService", "connectivity");
// // 获取WifiManager
// AndroidJavaObject applicationContext = _currentActivity.Call<AndroidJavaObject>("getApplicationContext");
// _wifiManager = applicationContext.Call<AndroidJavaObject>("getSystemService", "wifi");
// Debug.Log("Android网络管理器初始化成功");
// }
// catch (Exception ex)
// {
// Debug.LogError($"Android网络管理器初始化失败: {ex.Message}");
// }
// }
// /// <summary>
// /// 获取网络连接状态
// /// </summary>
// public static NetworkReachability GetNetworkReachability()
// {
// try
// {
// if (_connectivityManager == null)
// return NetworkReachability.NotReachable;
// AndroidJavaObject activeNetwork = _connectivityManager.Call<AndroidJavaObject>("getActiveNetworkInfo");
// if (activeNetwork == null)
// return NetworkReachability.NotReachable;
// bool isConnected = activeNetwork.Call<bool>("isConnected");
// if (!isConnected)
// return NetworkReachability.NotReachable;
// int networkType = activeNetwork.Call<int>("getType");
// // TYPE_WIFI = 1, TYPE_MOBILE = 0
// return networkType == 1 ? NetworkReachability.ReachableViaLocalAreaNetwork
// : NetworkReachability.ReachableViaCarrierDataNetwork;
// }
// catch (Exception ex)
// {
// Debug.LogError($"获取Android网络状态失败: {ex.Message}");
// return NetworkReachability.NotReachable;
// }
// }
// /// <summary>
// /// 获取WiFi信息
// /// </summary>
// public static AndroidWifiInfo GetWifiInfo()
// {
// try
// {
// var wifiInfo = new AndroidWifiInfo();
// if (_wifiManager == null)
// {
// wifiInfo.IsConnected = false;
// return wifiInfo;
// }
// bool isWifiEnabled = _wifiManager.Call<bool>("isWifiEnabled");
// wifiInfo.IsWifiEnabled = isWifiEnabled;
// if (!isWifiEnabled)
// {
// wifiInfo.IsConnected = false;
// return wifiInfo;
// }
// AndroidJavaObject connectionInfo = _wifiManager.Call<AndroidJavaObject>("getConnectionInfo");
// if (connectionInfo != null)
// {
// wifiInfo.SSID = connectionInfo.Call<string>("getSSID");
// wifiInfo.SignalStrength = connectionInfo.Call<int>("getRssi");
// wifiInfo.LinkSpeed = connectionInfo.Call<int>("getLinkSpeed");
// wifiInfo.IsConnected = !string.IsNullOrEmpty(wifiInfo.SSID) && !wifiInfo.SSID.Equals("<unknown ssid>");
// // 清理SSID的引号
// if (wifiInfo.SSID != null && wifiInfo.SSID.StartsWith("\"") && wifiInfo.SSID.EndsWith("\""))
// {
// wifiInfo.SSID = wifiInfo.SSID.Substring(1, wifiInfo.SSID.Length - 2);
// }
// }
// return wifiInfo;
// }
// catch (Exception ex)
// {
// Debug.LogError($"获取Android WiFi信息失败: {ex.Message}");
// return new AndroidWifiInfo { IsConnected = false };
// }
// }
// /// <summary>
// /// 获取本地IP地址
// /// </summary>
// public static string GetLocalIPAddress()
// {
// try
// {
// if (_wifiManager == null) return "未知";
// AndroidJavaObject connectionInfo = _wifiManager.Call<AndroidJavaObject>("getConnectionInfo");
// if (connectionInfo != null)
// {
// int ipAddress = connectionInfo.Call<int>("getIpAddress");
// // 转换IP地址格式
// return string.Format("{0}.{1}.{2}.{3}",
// (ipAddress & 0xff),
// (ipAddress >> 8 & 0xff),
// (ipAddress >> 16 & 0xff),
// (ipAddress >> 24 & 0xff));
// }
// return "未知";
// }
// catch (Exception ex)
// {
// Debug.LogError($"获取Android IP地址失败: {ex.Message}");
// return "未知";
// }
// }
// /// <summary>
// /// 启用/禁用WiFi (需要权限)
// /// </summary>
// public static bool SetWifiEnabled(bool enabled)
// {
// try
// {
// if (_wifiManager == null) return false;
// // 注意从Android Q (API 29) 开始,应用无法直接启用/禁用WiFi
// bool result = _wifiManager.Call<bool>("setWifiEnabled", enabled);
// Debug.Log($"Android: WiFi {(enabled ? "启用" : "禁用")} - 结果: {result}");
// return result;
// }
// catch (Exception ex)
// {
// Debug.LogError($"Android WiFi控制失败: {ex.Message}");
// return false;
// }
// }
// #endregion
// #elif UNITY_STANDALONE_WIN && !UNITY_EDITOR
// #region Windows 网络实现
// /// <summary>
// /// 获取Windows网络连接状态
// /// </summary>
// public static NetworkReachability GetNetworkReachability()
// {
// try
// {
// if (NetworkInterface.GetIsNetworkAvailable())
// {
// // 检查是否有可用的网络接口
// NetworkInterface[] interfaces = NetworkInterface.GetAllNetworkInterfaces();
// foreach (NetworkInterface ni in interfaces)
// {
// if (ni.OperationalStatus == OperationalStatus.Up &&
// ni.NetworkInterfaceType != NetworkInterfaceType.Loopback &&
// ni.NetworkInterfaceType != NetworkInterfaceType.Tunnel)
// {
// // 简化判断:如果是以太网接口则认为是局域网,否则可能是移动网络
// if (ni.NetworkInterfaceType == NetworkInterfaceType.Ethernet ||
// ni.NetworkInterfaceType == NetworkInterfaceType.Wireless80211)
// {
// return NetworkReachability.ReachableViaLocalAreaNetwork;
// }
// }
// }
// }
// return NetworkReachability.NotReachable;
// }
// catch (Exception ex)
// {
// Debug.LogError($"获取Windows网络状态失败: {ex.Message}");
// return NetworkReachability.NotReachable;
// }
// }
// /// <summary>
// /// 获取Windows本地IP地址
// /// </summary>
// public static string GetLocalIPAddress()
// {
// try
// {
// string hostName = Dns.GetHostName();
// IPHostEntry hostEntry = Dns.GetHostEntry(hostName);
// foreach (IPAddress ip in hostEntry.AddressList)
// {
// if (ip.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
// {
// return ip.ToString();
// }
// }
// return "未知";
// }
// catch (Exception ex)
// {
// Debug.LogError($"获取Windows IP地址失败: {ex.Message}");
// return "未知";
// }
// }
// /// <summary>
// /// 获取Windows WiFi信息 (简化版本)
// /// </summary>
// public static WindowsWifiInfo GetWifiInfo()
// {
// try
// {
// var wifiInfo = new WindowsWifiInfo();
// NetworkInterface[] interfaces = NetworkInterface.GetAllNetworkInterfaces();
// foreach (NetworkInterface ni in interfaces)
// {
// if (ni.NetworkInterfaceType == NetworkInterfaceType.Wireless80211 &&
// ni.OperationalStatus == OperationalStatus.Up)
// {
// wifiInfo.IsConnected = true;
// wifiInfo.InterfaceName = ni.Name;
// wifiInfo.Speed = ni.Speed;
// break;
// }
// }
// return wifiInfo;
// }
// catch (Exception ex)
// {
// Debug.LogError($"获取Windows WiFi信息失败: {ex.Message}");
// return new WindowsWifiInfo { IsConnected = false };
// }
// }
// #endregion
// #else
// #region 模拟实现
// public static NetworkReachability GetNetworkReachability()
// {
// Debug.Log("[模拟] 获取网络状态");
// return NetworkReachability.ReachableViaLocalAreaNetwork;
// }
// public static string GetLocalIPAddress()
// {
// Debug.Log("[模拟] 获取IP地址");
// return "192.168.1.100";
// }
// #if UNITY_ANDROID
// public static AndroidWifiInfo GetWifiInfo()
// {
// Debug.Log("[模拟] 获取WiFi信息");
// return new AndroidWifiInfo
// {
// IsConnected = true,
// SSID = "TestNetwork",
// SignalStrength = -50,
// LinkSpeed = 150
// };
// }
// public static bool SetWifiEnabled(bool enabled)
// {
// Debug.Log($"[模拟] WiFi {(enabled ? "启用" : "禁用")}");
// return true;
// }
// #else
// public static WindowsWifiInfo GetWifiInfo()
// {
// Debug.Log("[模拟] 获取WiFi信息");
// return new WindowsWifiInfo
// {
// IsConnected = true,
// InterfaceName = "Wi-Fi",
// Speed = 1000000000
// };
// }
// #endif
// #endregion
// #endif
// #region 公共方法
// /// <summary>
// /// 检查是否连接到互联网
// /// </summary>
// public static bool HasInternetConnection()
// {
// #if UNITY_ANDROID && !UNITY_EDITOR
// // Android平台返回false避免网络检查
// return false;
// #else
// return Application.internetReachability != NetworkReachability.NotReachable;
// #endif
// }
// /// <summary>
// /// 获取网络类型描述
// /// </summary>
// public static string GetNetworkTypeDescription()
// {
// #if UNITY_ANDROID && !UNITY_EDITOR
// // Android平台返回静态描述避免网络检查
// return "配置模式 (跳过网络检查)";
// #else
// switch (Application.internetReachability)
// {
// case NetworkReachability.NotReachable:
// return "无网络连接";
// case NetworkReachability.ReachableViaCarrierDataNetwork:
// return "移动数据网络";
// case NetworkReachability.ReachableViaLocalAreaNetwork:
// return "WiFi/以太网";
// default:
// return "未知网络";
// }
// #endif
// }
// #endregion
// }
// /// <summary>
// /// Android WiFi信息
// /// </summary>
// [System.Serializable]
// public class AndroidWifiInfo
// {
// public bool IsConnected;
// public bool IsWifiEnabled;
// public string SSID;
// public int SignalStrength; // dBm
// public int LinkSpeed; // Mbps
// public override string ToString()
// {
// if (!IsConnected)
// return "未连接WiFi";
// return $"WiFi: {SSID}, 信号: {SignalStrength}dBm, 速度: {LinkSpeed}Mbps";
// }
// }
// /// <summary>
// /// Windows WiFi信息
// /// </summary>
// [System.Serializable]
// public class WindowsWifiInfo
// {
// public bool IsConnected;
// public string InterfaceName;
// public long Speed; // bps
// public override string ToString()
// {
// if (!IsConnected)
// return "未连接WiFi";
// return $"WiFi: {InterfaceName}, 速度: {Speed / 1000000}Mbps";
// }
// }