using System.Collections; using System.Collections.Generic; using System.Threading; using Cysharp.Threading.Tasks; using Stary.Evo; using UnityEngine; public interface IGlobalConfigSystem : ISystem { public string GetConnectionId(); public void SetConnectionId(string connectionId); public string GetConnectionName(); public void SetConnectionName(string connectionName); public UniTaskVoid StartConnectionTime(); public string GetConnectionTime(); public void StopConnectionTime(); } public class GlobalConfigSystem : AbstractSystem, IGlobalConfigSystem { private string _connectionId; private string _connectionName; private float _connectionTime; private CancellationTokenSource _cts; protected override void OnInit() { } public override void Dispose() { } public string GetConnectionId() { if (string.IsNullOrEmpty(_connectionId)) { Debug.LogWarning("GlobalConfigSystem: GetConnectionId not set"); return ""; } return _connectionId; } public void SetConnectionId(string connectionId) { _connectionId = connectionId; } public string GetConnectionName() { if (string.IsNullOrEmpty(_connectionName)) { Debug.LogWarning("GlobalConfigSystem: GetConnectionName not set"); return ""; } return _connectionName; } public void SetConnectionName(string connectionName) { _connectionName = connectionName; } public async UniTaskVoid StartConnectionTime() { _cts = new CancellationTokenSource(); _connectionTime = 0; while (!_cts.IsCancellationRequested) { _connectionTime+=Time.deltaTime; await UniTask.Yield(_cts.Token); // 等一帧,等价于 Update } } public string GetConnectionTime() { int totalSeconds = (int)_connectionTime; int hours = totalSeconds / 3600; int minutes = totalSeconds % 3600 / 60; int seconds = totalSeconds % 60; return $"{hours:D2}:{minutes:D2}:{seconds:D2}"; } public void StopConnectionTime() { _cts?.Cancel(); _cts?.Dispose(); _cts = null; } }