From 901fd9bff003e31088fb77aa0b46a5d5c07572b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergej=20G=C3=B6rzen?= Date: Tue, 2 May 2023 22:34:42 +0200 Subject: [PATCH 1/2] Update UnityMainThreadDispatcher.cs added namespace --- Runtime/UnityMainThreadDispatcher.cs | 154 ++++++++++++++------------- 1 file changed, 78 insertions(+), 76 deletions(-) diff --git a/Runtime/UnityMainThreadDispatcher.cs b/Runtime/UnityMainThreadDispatcher.cs index 7a4f783..0716d36 100755 --- a/Runtime/UnityMainThreadDispatcher.cs +++ b/Runtime/UnityMainThreadDispatcher.cs @@ -20,100 +20,102 @@ limitations under the License. using System; using System.Threading.Tasks; -/// Author: Pim de Witte (pimdewitte.com) and contributors, https://github.com/PimDeWitte/UnityMainThreadDispatcher -/// -/// A thread-safe class which holds a queue with actions to execute on the next Update() method. It can be used to make calls to the main thread for -/// things such as UI Manipulation in Unity. It was developed for use in combination with the Firebase Unity plugin, which uses separate threads for event handling -/// -public class UnityMainThreadDispatcher : MonoBehaviour { - - private static readonly Queue _executionQueue = new Queue(); - - public void Update() { - lock(_executionQueue) { - while (_executionQueue.Count > 0) { - _executionQueue.Dequeue().Invoke(); +namespace PimDeWitte.UnityMainThreadDispatcher { + /// Author: Pim de Witte (pimdewitte.com) and contributors, https://github.com/PimDeWitte/UnityMainThreadDispatcher + /// + /// A thread-safe class which holds a queue with actions to execute on the next Update() method. It can be used to make calls to the main thread for + /// things such as UI Manipulation in Unity. It was developed for use in combination with the Firebase Unity plugin, which uses separate threads for event handling + /// + public class UnityMainThreadDispatcher : MonoBehaviour { + + private static readonly Queue _executionQueue = new Queue(); + + public void Update() { + lock(_executionQueue) { + while (_executionQueue.Count > 0) { + _executionQueue.Dequeue().Invoke(); + } } } - } - /// - /// Locks the queue and adds the IEnumerator to the queue - /// - /// IEnumerator function that will be executed from the main thread. - public void Enqueue(IEnumerator action) { - lock (_executionQueue) { - _executionQueue.Enqueue (() => { - StartCoroutine (action); - }); + /// + /// Locks the queue and adds the IEnumerator to the queue + /// + /// IEnumerator function that will be executed from the main thread. + public void Enqueue(IEnumerator action) { + lock (_executionQueue) { + _executionQueue.Enqueue (() => { + StartCoroutine (action); + }); + } } - } - /// - /// Locks the queue and adds the Action to the queue - /// - /// function that will be executed from the main thread. - public void Enqueue(Action action) - { - Enqueue(ActionWrapper(action)); - } - - /// - /// Locks the queue and adds the Action to the queue, returning a Task which is completed when the action completes - /// - /// function that will be executed from the main thread. - /// A Task that can be awaited until the action completes - public Task EnqueueAsync(Action action) - { - var tcs = new TaskCompletionSource(); - - void WrappedAction() { - try - { - action(); - tcs.TrySetResult(true); - } catch (Exception ex) - { - tcs.TrySetException(ex); + /// + /// Locks the queue and adds the Action to the queue + /// + /// function that will be executed from the main thread. + public void Enqueue(Action action) + { + Enqueue(ActionWrapper(action)); + } + + /// + /// Locks the queue and adds the Action to the queue, returning a Task which is completed when the action completes + /// + /// function that will be executed from the main thread. + /// A Task that can be awaited until the action completes + public Task EnqueueAsync(Action action) + { + var tcs = new TaskCompletionSource(); + + void WrappedAction() { + try + { + action(); + tcs.TrySetResult(true); + } catch (Exception ex) + { + tcs.TrySetException(ex); + } } + + Enqueue(ActionWrapper(WrappedAction)); + return tcs.Task; } - Enqueue(ActionWrapper(WrappedAction)); - return tcs.Task; - } - - IEnumerator ActionWrapper(Action a) - { - a(); - yield return null; - } + IEnumerator ActionWrapper(Action a) + { + a(); + yield return null; + } - private static UnityMainThreadDispatcher _instance = null; + private static UnityMainThreadDispatcher _instance = null; - public static bool Exists() { - return _instance != null; - } + public static bool Exists() { + return _instance != null; + } - public static UnityMainThreadDispatcher Instance() { - if (!Exists ()) { - throw new Exception ("UnityMainThreadDispatcher could not find the UnityMainThreadDispatcher object. Please ensure you have added the MainThreadExecutor Prefab to your scene."); + public static UnityMainThreadDispatcher Instance() { + if (!Exists ()) { + throw new Exception ("UnityMainThreadDispatcher could not find the UnityMainThreadDispatcher object. Please ensure you have added the MainThreadExecutor Prefab to your scene."); + } + return _instance; } - return _instance; - } - void Awake() { - if (_instance == null) { - _instance = this; - DontDestroyOnLoad(this.gameObject); + void Awake() { + if (_instance == null) { + _instance = this; + DontDestroyOnLoad(this.gameObject); + } } - } - void OnDestroy() { - _instance = null; - } + void OnDestroy() { + _instance = null; + } + } } From 13415a4fd4333f73f2ac9d1952da3fa5215c7fdc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergej=20G=C3=B6rzen?= Date: Tue, 2 May 2023 22:37:59 +0200 Subject: [PATCH 2/2] Update PimDeWitte.UnityMainThreadDispatcher.asmdef added namespace to root --- Runtime/PimDeWitte.UnityMainThreadDispatcher.asmdef | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/Runtime/PimDeWitte.UnityMainThreadDispatcher.asmdef b/Runtime/PimDeWitte.UnityMainThreadDispatcher.asmdef index c8c36b0..38f6169 100755 --- a/Runtime/PimDeWitte.UnityMainThreadDispatcher.asmdef +++ b/Runtime/PimDeWitte.UnityMainThreadDispatcher.asmdef @@ -1,3 +1,14 @@ { - "name": "PimDeWitte.UnityMainThreadDispatcher" + "name": "PimDeWitte.UnityMainThreadDispatcher", + "rootNamespace": "PimDeWitte.UnityMainThreadDispatcher", + "references": [], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false }