update: 更新线程控制
parent
ef3a11c382
commit
baae2a6eb4
|
|
@ -0,0 +1,3 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 1d20da1a87484f37bc53360cc2414030
|
||||||
|
timeCreated: 1712622721
|
||||||
|
|
@ -0,0 +1,23 @@
|
||||||
|
namespace Guru
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 更新器
|
||||||
|
/// </summary>
|
||||||
|
public interface IUpdater
|
||||||
|
{
|
||||||
|
UpdaterState State { get; }
|
||||||
|
void Start();
|
||||||
|
void OnUpdate();
|
||||||
|
void Pause(bool pause);
|
||||||
|
void Kill();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public enum UpdaterState
|
||||||
|
{
|
||||||
|
Prepare,
|
||||||
|
Running,
|
||||||
|
Pause,
|
||||||
|
Kill,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,3 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 6ab7dd209c3a494eab0dfbedce0700d8
|
||||||
|
timeCreated: 1712622736
|
||||||
|
|
@ -0,0 +1,82 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
namespace Guru
|
||||||
|
{
|
||||||
|
using System;
|
||||||
|
using System.Collections;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
|
||||||
|
public class ThreadHandler: IUpdater
|
||||||
|
{
|
||||||
|
private Queue<Action> _actions;
|
||||||
|
public Queue<Action> Actions
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
if(_actions == null)
|
||||||
|
_actions = new Queue<Action>(10);
|
||||||
|
return _actions;
|
||||||
|
}
|
||||||
|
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (value != null) _actions = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private UpdaterState _state;
|
||||||
|
public UpdaterState State => _state;
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 启动 Updater
|
||||||
|
/// </summary>
|
||||||
|
public void Start()
|
||||||
|
{
|
||||||
|
_state = UpdaterState.Running;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 执行方案
|
||||||
|
/// </summary>
|
||||||
|
public void OnUpdate()
|
||||||
|
{
|
||||||
|
if (Actions.Count > 0)
|
||||||
|
{
|
||||||
|
// 消耗对垒
|
||||||
|
while (Actions.Count > 0)
|
||||||
|
{
|
||||||
|
Actions.Dequeue()?.Invoke();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Pause(bool pause = true)
|
||||||
|
{
|
||||||
|
_state = pause ? UpdaterState.Pause : UpdaterState.Running;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 删除对象
|
||||||
|
/// </summary>
|
||||||
|
public void Kill()
|
||||||
|
{
|
||||||
|
_state = UpdaterState.Kill;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Dispose()
|
||||||
|
{
|
||||||
|
_actions.Clear();
|
||||||
|
_state = UpdaterState.Kill;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void AddAction(Action action)
|
||||||
|
{
|
||||||
|
if (action == null) return;
|
||||||
|
Actions.Enqueue(action);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,3 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: dc05f1b1ff5947c19ce6af1db301398d
|
||||||
|
timeCreated: 1712624042
|
||||||
|
|
@ -39,7 +39,7 @@ namespace Guru
|
||||||
{
|
{
|
||||||
if (!IsInitialSuccess)
|
if (!IsInitialSuccess)
|
||||||
{
|
{
|
||||||
Debug.LogError($"{Tag} :: LogEvent {eventName} :: Please call <GuruSDK.Init()> first, before you call <LogEvent>.");
|
Debug.LogError($"{Tag} :: LogEvent {eventName} :: Please call <GuruSDK.Start()> first, before you call <LogEvent>.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Analytics.Track(eventName, data);
|
Analytics.Track(eventName, data);
|
||||||
|
|
@ -49,7 +49,7 @@ namespace Guru
|
||||||
{
|
{
|
||||||
if (!IsInitialSuccess)
|
if (!IsInitialSuccess)
|
||||||
{
|
{
|
||||||
Debug.LogError($"{Tag} :: SetScreen {screen} :: Please call <GuruSDK.Init()> first, before you call <SetScreen>.");
|
Debug.LogError($"{Tag} :: SetScreen {screen} :: Please call <GuruSDK.Start()> first, before you call <SetScreen>.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Analytics.SetCurrentScreen(screen, extra);
|
Analytics.SetCurrentScreen(screen, extra);
|
||||||
|
|
@ -74,7 +74,7 @@ namespace Guru
|
||||||
{
|
{
|
||||||
if (!IsInitialSuccess)
|
if (!IsInitialSuccess)
|
||||||
{
|
{
|
||||||
Debug.LogError($"{Tag} :: LogLevelStart {levelId} :: Please call <GuruSDK.Init()> first, before you call <LogLevelStart>.");
|
Debug.LogError($"{Tag} :: LogLevelStart {levelId} :: Please call <GuruSDK.Start()> first, before you call <LogLevelStart>.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -116,7 +116,7 @@ namespace Guru
|
||||||
{
|
{
|
||||||
if (!IsInitialSuccess)
|
if (!IsInitialSuccess)
|
||||||
{
|
{
|
||||||
Debug.LogError($"{Tag} :: LogLevelEnd {levelId} :: Please call <GuruSDK.Init()> first, before you call <LogLevelEnd>.");
|
Debug.LogError($"{Tag} :: LogLevelEnd {levelId} :: Please call <GuruSDK.Start()> first, before you call <LogLevelEnd>.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -182,7 +182,7 @@ namespace Guru
|
||||||
{
|
{
|
||||||
if (!IsInitialSuccess)
|
if (!IsInitialSuccess)
|
||||||
{
|
{
|
||||||
Debug.LogError($"{Tag} :: LogLevelUp {playerLevel} :: Please call <GuruSDK.Init()> first, before you call <LogLevelUp>.");
|
Debug.LogError($"{Tag} :: LogLevelUp {playerLevel} :: Please call <GuruSDK.Start()> first, before you call <LogLevelUp>.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Analytics.LevelUp(playerLevel, playerName);
|
Analytics.LevelUp(playerLevel, playerName);
|
||||||
|
|
@ -196,7 +196,7 @@ namespace Guru
|
||||||
{
|
{
|
||||||
if (!IsInitialSuccess)
|
if (!IsInitialSuccess)
|
||||||
{
|
{
|
||||||
Debug.LogError($"{Tag} :: LogAchievement {achievementName} :: Please call <GuruSDK.Init()> first, before you call <LogAchievement>.");
|
Debug.LogError($"{Tag} :: LogAchievement {achievementName} :: Please call <GuruSDK.Start()> first, before you call <LogAchievement>.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Analytics.UnlockAchievement(achievementName);
|
Analytics.UnlockAchievement(achievementName);
|
||||||
|
|
@ -213,7 +213,7 @@ namespace Guru
|
||||||
{
|
{
|
||||||
if (!IsInitialSuccess)
|
if (!IsInitialSuccess)
|
||||||
{
|
{
|
||||||
Debug.LogError($"{Tag} :: InitUserProperties :: Please call <GuruSDK.Init()> first, before you call <InitUserProperties>.");
|
Debug.LogError($"{Tag} :: InitUserProperties :: Please call <GuruSDK.Start()> first, before you call <InitUserProperties>.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -233,7 +233,7 @@ namespace Guru
|
||||||
{
|
{
|
||||||
if (!IsInitialSuccess)
|
if (!IsInitialSuccess)
|
||||||
{
|
{
|
||||||
Debug.LogError($"{Tag} :: SetUserProperty {key}:{value} ::Please call <GuruSDK.Init()> first, before you call <SetUserProperty>.");
|
Debug.LogError($"{Tag} :: SetUserProperty {key}:{value} ::Please call <GuruSDK.Start()> first, before you call <SetUserProperty>.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Analytics.SetUserProperty(key, value);
|
Analytics.SetUserProperty(key, value);
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,7 @@ namespace Guru
|
||||||
public const string BuyFail_DuplicateTransaction = "DuplicateTransaction";
|
public const string BuyFail_DuplicateTransaction = "DuplicateTransaction";
|
||||||
public const string BuyFail_Unknown = "Unknown";
|
public const string BuyFail_Unknown = "Unknown";
|
||||||
|
|
||||||
#region Init
|
#region Start
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 初始化IAP 功能
|
/// 初始化IAP 功能
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,29 @@
|
||||||
|
namespace Guru
|
||||||
|
{
|
||||||
|
using System;
|
||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
public partial class GuruSDK
|
||||||
|
{
|
||||||
|
private ThreadHandler _threadHandler;
|
||||||
|
|
||||||
|
private void InitThreadHandler()
|
||||||
|
{
|
||||||
|
_threadHandler = new ThreadHandler();
|
||||||
|
RegisterUpdater(_threadHandler);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void AddActionToMainThread(Action action)
|
||||||
|
{
|
||||||
|
_threadHandler?.AddAction(action);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static void RunOnMainThread(Action action)
|
||||||
|
{
|
||||||
|
Instance.AddActionToMainThread(action);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,3 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 8a0605c6b4b64b37a0036b34cbadb9ca
|
||||||
|
timeCreated: 1712622534
|
||||||
|
|
@ -131,11 +131,13 @@ namespace Guru
|
||||||
_initConfig = config;
|
_initConfig = config;
|
||||||
_onCompleteCallback = onComplete;
|
_onCompleteCallback = onComplete;
|
||||||
_isDebugEnabled = config.DebugMode;
|
_isDebugEnabled = config.DebugMode;
|
||||||
|
|
||||||
|
InitThreadHandler(); // 初始化线程处理器
|
||||||
}
|
}
|
||||||
|
|
||||||
void Start()
|
void Start()
|
||||||
{
|
{
|
||||||
//---- Init All tools ----
|
//---- Start All tools ----
|
||||||
LogI($"#2 --- InitFirebase ---");
|
LogI($"#2 --- InitFirebase ---");
|
||||||
//---------- Start Firebase ------------
|
//---------- Start Firebase ------------
|
||||||
FirebaseUtil.onInitComplete += OnFirebaseReady;
|
FirebaseUtil.onInitComplete += OnFirebaseReady;
|
||||||
|
|
@ -217,7 +219,15 @@ namespace Guru
|
||||||
ABTestManager.Init(); // 启动AB测试解析器
|
ABTestManager.Init(); // 启动AB测试解析器
|
||||||
Callbacks.Remote._onRemoteFetchComplete?.Invoke(success);
|
Callbacks.Remote._onRemoteFetchComplete?.Invoke(success);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
private void Update()
|
||||||
|
{
|
||||||
|
UpdateAllUpdates(); // 驱动所有的更新器
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region App Remote Update
|
#region App Remote Update
|
||||||
|
|
@ -248,7 +258,7 @@ namespace Guru
|
||||||
|
|
||||||
Try(() =>
|
Try(() =>
|
||||||
{
|
{
|
||||||
LogI($"#4.1 --- Init apply services ---");
|
LogI($"#4.1 --- Start apply services ---");
|
||||||
//----------------------------------------------------------------
|
//----------------------------------------------------------------
|
||||||
|
|
||||||
// 自打点设置错误上报
|
// 自打点设置错误上报
|
||||||
|
|
@ -265,7 +275,7 @@ namespace Guru
|
||||||
GuruSettings.UpdateAdjustEvents(_appServicesConfig.adjust_settings.events);
|
GuruSettings.UpdateAdjustEvents(_appServicesConfig.adjust_settings.events);
|
||||||
}
|
}
|
||||||
|
|
||||||
LogI($"#4.2 --- Init GuruSttings ---");
|
LogI($"#4.2 --- Start GuruSttings ---");
|
||||||
// GuruSettings 设置
|
// GuruSettings 设置
|
||||||
if (null != _appServicesConfig.app_settings)
|
if (null != _appServicesConfig.app_settings)
|
||||||
{
|
{
|
||||||
|
|
@ -313,7 +323,7 @@ namespace Guru
|
||||||
// InitIAP(_initConfig.GoogleKeys, _initConfig.AppleRootCerts); // 初始化IAP
|
// InitIAP(_initConfig.GoogleKeys, _initConfig.AppleRootCerts); // 初始化IAP
|
||||||
Try(() =>
|
Try(() =>
|
||||||
{
|
{
|
||||||
LogI($"#4.3 --- Init IAP ---");
|
LogI($"#4.3 --- Start IAP ---");
|
||||||
InitIAP(_initConfig.GoogleKeys, _initConfig.AppleRootCerts); // 初始化IAP
|
InitIAP(_initConfig.GoogleKeys, _initConfig.AppleRootCerts); // 初始化IAP
|
||||||
}, ex =>
|
}, ex =>
|
||||||
{
|
{
|
||||||
|
|
@ -326,7 +336,7 @@ namespace Guru
|
||||||
// KeywordsManager.Install(Model.IsIAPUser, Model.SuccessLevelId); // 启动Keyword管理器
|
// KeywordsManager.Install(Model.IsIAPUser, Model.SuccessLevelId); // 启动Keyword管理器
|
||||||
Try(() =>
|
Try(() =>
|
||||||
{
|
{
|
||||||
LogI($"#4.4 --- Init Keywords ---");
|
LogI($"#4.4 --- Start Keywords ---");
|
||||||
KeywordsManager.Install(Model.IsIAPUser, Model.SuccessLevelId); // 启动Keyword管理器
|
KeywordsManager.Install(Model.IsIAPUser, Model.SuccessLevelId); // 启动Keyword管理器
|
||||||
}, ex =>
|
}, ex =>
|
||||||
{
|
{
|
||||||
|
|
@ -596,6 +606,89 @@ namespace Guru
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
#region 帧更新 Updater
|
||||||
|
|
||||||
|
|
||||||
|
private List<IUpdater> _updaterRunningList;
|
||||||
|
private List<IUpdater> _updaterRemoveList;
|
||||||
|
|
||||||
|
private void InitUpdaters()
|
||||||
|
{
|
||||||
|
_updaterRunningList = new List<IUpdater>(20);
|
||||||
|
_updaterRemoveList = new List<IUpdater>(20);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void UpdateAllUpdates()
|
||||||
|
{
|
||||||
|
int i = 0;
|
||||||
|
IUpdater updater;
|
||||||
|
// ---- Updater Trigger ----
|
||||||
|
if (_updaterRunningList.Count > 0)
|
||||||
|
{
|
||||||
|
i = 0;
|
||||||
|
while (i < _updaterRunningList.Count)
|
||||||
|
{
|
||||||
|
updater = _updaterRunningList[i];
|
||||||
|
if (updater != null)
|
||||||
|
{
|
||||||
|
if (updater.State == UpdaterState.Running)
|
||||||
|
{
|
||||||
|
updater.OnUpdate();
|
||||||
|
}
|
||||||
|
else if(updater.State == UpdaterState.Kill)
|
||||||
|
{
|
||||||
|
_updaterRemoveList.Add(updater);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
_updaterRunningList.RemoveAt(i);
|
||||||
|
i--;
|
||||||
|
}
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_updaterRemoveList.Count > 0)
|
||||||
|
{
|
||||||
|
i = 0;
|
||||||
|
while (i < _updaterRemoveList.Count)
|
||||||
|
{
|
||||||
|
RemoveUpdater(_updaterRemoveList[i]);
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
_updaterRemoveList.Clear();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 注册帧更新器
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="updater"></param>
|
||||||
|
public static void RegisterUpdater(IUpdater updater)
|
||||||
|
{
|
||||||
|
Instance.AddUpdater(updater);
|
||||||
|
updater.Start();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private void AddUpdater(IUpdater updater)
|
||||||
|
{
|
||||||
|
if (_updaterRunningList == null) _updaterRunningList = new List<IUpdater>(20);
|
||||||
|
_updaterRunningList.Add(updater);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void RemoveUpdater(IUpdater updater)
|
||||||
|
{
|
||||||
|
if (_updaterRunningList != null && updater != null)
|
||||||
|
{
|
||||||
|
_updaterRunningList.Remove(updater);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -4,7 +4,8 @@
|
||||||
"references": [
|
"references": [
|
||||||
"UnityEngine.TestRunner",
|
"UnityEngine.TestRunner",
|
||||||
"UnityEditor.TestRunner",
|
"UnityEditor.TestRunner",
|
||||||
"Guru.Runtime"
|
"Guru.Runtime",
|
||||||
|
"GuruSDK"
|
||||||
],
|
],
|
||||||
"includePlatforms": [],
|
"includePlatforms": [],
|
||||||
"excludePlatforms": [],
|
"excludePlatforms": [],
|
||||||
|
|
|
||||||
|
|
@ -1,3 +0,0 @@
|
||||||
fileFormatVersion: 2
|
|
||||||
guid: c3f29532318446f2aa35c275859dad0d
|
|
||||||
timeCreated: 1712580248
|
|
||||||
|
|
@ -1,8 +0,0 @@
|
||||||
fileFormatVersion: 2
|
|
||||||
guid: 80c78f22e10d0411d85fb2a24c69cab2
|
|
||||||
folderAsset: yes
|
|
||||||
DefaultImporter:
|
|
||||||
externalObjects: {}
|
|
||||||
userData:
|
|
||||||
assetBundleName:
|
|
||||||
assetBundleVariant:
|
|
||||||
|
|
@ -0,0 +1,49 @@
|
||||||
|
|
||||||
|
|
||||||
|
namespace Guru.Tests
|
||||||
|
{
|
||||||
|
using NUnit.Framework;
|
||||||
|
using System.Threading;
|
||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
public class Test_Threading
|
||||||
|
{
|
||||||
|
|
||||||
|
private int TestCount
|
||||||
|
{
|
||||||
|
get => PlayerPrefs.GetInt(nameof(TestCount), 0);
|
||||||
|
set => PlayerPrefs.SetInt(nameof(TestCount), value);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void Test_ThreadingCall()
|
||||||
|
{
|
||||||
|
GuruSDK.Init(success =>
|
||||||
|
{
|
||||||
|
GuruSDK.Delay(0.1f, () =>
|
||||||
|
{
|
||||||
|
CallThreading();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private void CallThreading()
|
||||||
|
{
|
||||||
|
Debug.Log($"--------- CallThreading -------------");
|
||||||
|
var t = new Thread(() =>
|
||||||
|
{
|
||||||
|
Debug.Log($"--------- Thread Start -------------");
|
||||||
|
Thread.Sleep(2000);
|
||||||
|
GuruSDK.RunOnMainThread(() =>
|
||||||
|
{
|
||||||
|
TestCount++;
|
||||||
|
Debug.Log($">>>>> CallThreading: {TestCount}");
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
t.Start();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,3 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 67d9cfd9949c48f3a8f6e6821b733ff1
|
||||||
|
timeCreated: 1712649738
|
||||||
Loading…
Reference in New Issue