From a768b1de90791a190b60993c015ff97eb26580fa Mon Sep 17 00:00:00 2001 From: huyufei Date: Thu, 1 Aug 2024 12:44:05 +0800 Subject: [PATCH] =?UTF-8?q?update=EF=BC=9A=20=E5=AE=8C=E5=96=84=20guru=5Fo?= =?UTF-8?q?ffline=20=E6=89=93=E7=82=B9=E7=9A=84=E6=9C=AC=E5=9C=B0=E6=8C=81?= =?UTF-8?q?=E4=B9=85=E5=8C=96=E5=AD=98=E5=82=A8=E5=8A=9F=E8=83=BD=EF=BC=8C?= =?UTF-8?q?=20CodeReview?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --story=1021173 --user=yufei.hu 【中台】【BI】上报用户离线打点 guru_offline https://www.tapd.cn/33527076/s/1161158 Signed-off-by: huyufei --- .../Runtime/NetworkStatusMonitor.cs | 95 ++++++++++++++++--- 1 file changed, 83 insertions(+), 12 deletions(-) diff --git a/Runtime/GuruNetworkMonitor/Runtime/NetworkStatusMonitor.cs b/Runtime/GuruNetworkMonitor/Runtime/NetworkStatusMonitor.cs index 17e2b93..3efb332 100644 --- a/Runtime/GuruNetworkMonitor/Runtime/NetworkStatusMonitor.cs +++ b/Runtime/GuruNetworkMonitor/Runtime/NetworkStatusMonitor.cs @@ -10,7 +10,6 @@ namespace Guru.Network public class NetworkStatusMonitor { private const string Tag = "[NET]"; - private const string NETWORK_STATUS_NOT_SET = "not_set"; private const string NETWORK_STATUS_NONE = "none"; private const string NETWORK_STATUS_MOBILE = "mobile"; @@ -23,16 +22,21 @@ namespace Guru.Network private const int CHECK_STATUS_INTERVAL_SECOND = 10; - private DateTime _lastReportTime; - // TODO: 最好做一下持久化存储 + private DateTime LastReportDate + { + get => _saveData.LastReportDate; + set => _saveData.LastReportDate = value; + } + private string LastNetworkStatus { - get => PlayerPrefs.GetString(nameof(LastNetworkStatus), NETWORK_STATUS_NOT_SET); - set => PlayerPrefs.SetString(nameof(LastNetworkStatus), value); + get => _saveData.LastReportStatus; + set => _saveData.LastReportStatus = value; } private readonly Action _onNetworkStatusChanged; private readonly Action _onReportOffline; + private readonly NetworkMonitorData _saveData; /// /// 构造函数 @@ -43,6 +47,9 @@ namespace Guru.Network { _onNetworkStatusChanged = onNetworkStatusChanged; _onReportOffline = onReportOffline; + + _saveData = new NetworkMonitorData(); // 读取数据 + CoroutineHelper.Instance.StartCoroutine(OnCheckingNetworkStatus(CHECK_STATUS_INTERVAL_SECOND)); } @@ -52,12 +59,13 @@ namespace Guru.Network /// public string GetNetworkStatus() { - switch (Application.internetReachability) + var internetReachability = Application.internetReachability; + switch (internetReachability) { - case NetworkReachability.ReachableViaLocalAreaNetwork: - return NETWORK_STATUS_WIFI; case NetworkReachability.ReachableViaCarrierDataNetwork: return NETWORK_STATUS_MOBILE; + case NetworkReachability.ReachableViaLocalAreaNetwork: + return NETWORK_STATUS_WIFI; } return NETWORK_STATUS_NONE; } @@ -72,12 +80,12 @@ namespace Guru.Network /// 当前是可以打点上报 /// /// - private bool CanSendReport() => DateTime.UtcNow.DayOfYear != _lastReportTime.DayOfYear && DateTime.UtcNow.Year != _lastReportTime.Year; + private bool CanSendReport() => DateTime.UtcNow.DayOfYear != LastReportDate.DayOfYear && DateTime.UtcNow.Year != LastReportDate.Year; /// /// 设置打点时间 /// - private void SetReportTime() => _lastReportTime = DateTime.UtcNow; + private void SetReportTime() => LastReportDate = DateTime.UtcNow; private bool NeedReportOffline() { @@ -97,9 +105,9 @@ namespace Guru.Network if (NeedReportOffline()) { - SetReportTime(); - _onReportOffline?.Invoke(LastNetworkStatus); Debug.Log($"{Tag} --- Report Offline: {LastNetworkStatus}"); + _onReportOffline?.Invoke(LastNetworkStatus); + SetReportTime(); } LastNetworkStatus = status; @@ -119,5 +127,68 @@ namespace Guru.Network } } + + [Serializable] + class NetworkMonitorData + { + private const string K_NETWORK_MONITOR_DATA = "guru_network_monitor_data"; + private const string NETWORK_STATUS_NOT_SET = "not_set"; + + private DateTime _lastReportDate; + public DateTime LastReportDate + { + get => _lastReportDate; + set + { + _lastReportDate = value; + Save(true); + } + } + + private string _lastReportStatus; + public string LastReportStatus + { + get => _lastReportStatus; + set + { + _lastReportStatus = value; + Save(); + } + } + + public NetworkMonitorData() + { + Load(); // 立即加载数据 + } + + private void Load() + { + var raw = PlayerPrefs.GetString(K_NETWORK_MONITOR_DATA, ""); + + _lastReportStatus = NETWORK_STATUS_NOT_SET; + _lastReportDate = new DateTime(1970, 1, 1); + if (!string.IsNullOrEmpty(raw)) + { + try + { + var arr = raw.Split("|"); + if (arr.Length > 0) _lastReportStatus = arr[0]; + if (arr.Length > 1) _lastReportDate = DateTime.Parse(arr[1]); + } + catch (Exception ex) + { + Debug.LogError(ex); + } + } + } + + public void Save(bool force = false) + { + var buffer = $"{_lastReportStatus}|{_lastReportDate:g}"; + PlayerPrefs.SetString(K_NETWORK_MONITOR_DATA, buffer); + if(force) PlayerPrefs.Save(); + } + + } } } \ No newline at end of file