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

413 lines
14 KiB
C#
Raw Permalink 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;
// 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";
// }
// }