You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
PlumberUltimateAds/Assets/IronSource/Scripts/IronSourceEventsDispatcher.cs

82 lines
2.0 KiB
C#

3 months ago
using System;
using System.Collections.Generic;
using UnityEngine;
public class IronSourceEventsDispatcher : MonoBehaviour
{
private static IronSourceEventsDispatcher instance = null;
// Queue For Events
private static readonly Queue<Action> ironSourceExecuteOnMainThreadQueue = new Queue<Action>();
public static void executeAction(Action action)
{
lock (ironSourceExecuteOnMainThreadQueue)
{
ironSourceExecuteOnMainThreadQueue.Enqueue(action);
}
}
void Update()
{
// dispatch events on the main thread when the queue is bigger than 0
while (ironSourceExecuteOnMainThreadQueue.Count > 0)
{
Action IronSourceDequeuedAction = null;
lock (ironSourceExecuteOnMainThreadQueue)
{
try
{
IronSourceDequeuedAction = ironSourceExecuteOnMainThreadQueue.Dequeue();
}
catch (Exception e)
{
Debug.LogException(e);
}
}
if (IronSourceDequeuedAction != null)
{
IronSourceDequeuedAction.Invoke();
}
}
}
public void removeFromParent()
{
if (Application.platform != RuntimePlatform.IPhonePlayer && Application.platform != RuntimePlatform.Android)
{
Destroy(this);
}
}
public static void initialize()
{
if (isCreated())
{
return;
}
// Add an invisible game object to the scene
GameObject obj = new GameObject("IronSourceEventsDispatcher");
obj.hideFlags = HideFlags.HideAndDontSave;
DontDestroyOnLoad(obj);
instance = obj.AddComponent<IronSourceEventsDispatcher>();
}
public static bool isCreated()
{
return instance != null;
}
public void Awake()
{
DontDestroyOnLoad(gameObject);
}
public void OnDisable()
{
instance = null;
}
}