mirror of
https://github.com/misternebula/quantum-space-buddies.git
synced 2025-01-26 18:35:34 +00:00
remove globalmessengers and callbacks
This commit is contained in:
parent
85f55afc11
commit
add598a7b4
@ -1,3 +0,0 @@
|
|||||||
public delegate void Callback<T, U, V, W>(T arg1, U arg2, V arg3, W arg4);
|
|
||||||
public delegate void Callback<T, U, V, W, X>(T arg1, U arg2, V arg3, W arg4, X arg5);
|
|
||||||
public delegate void Callback<T, U, V, W, X, Y>(T arg1, U arg2, V arg3, W arg4, X arg5, Y arg6);
|
|
@ -1,82 +0,0 @@
|
|||||||
using OWML.Common;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
|
|
||||||
namespace QSB.Utility
|
|
||||||
{
|
|
||||||
public static class GlobalMessenger<T, U, V, W>
|
|
||||||
{
|
|
||||||
public static void AddListener(string eventType, Callback<T, U, V, W> handler)
|
|
||||||
{
|
|
||||||
object obj = _eventTable;
|
|
||||||
lock (obj)
|
|
||||||
{
|
|
||||||
if (!_eventTable.TryGetValue(eventType, out var eventData))
|
|
||||||
{
|
|
||||||
eventData = new EventData();
|
|
||||||
_eventTable.Add(eventType, eventData);
|
|
||||||
}
|
|
||||||
|
|
||||||
eventData.Callbacks.Add(handler);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void RemoveListener(string eventType, Callback<T, U, V, W> handler)
|
|
||||||
{
|
|
||||||
object obj = _eventTable;
|
|
||||||
lock (obj)
|
|
||||||
{
|
|
||||||
if (_eventTable.TryGetValue(eventType, out var eventData))
|
|
||||||
{
|
|
||||||
var num = eventData.Callbacks.IndexOf(handler);
|
|
||||||
if (num >= 0)
|
|
||||||
{
|
|
||||||
eventData.Callbacks[num] = eventData.Callbacks[eventData.Callbacks.Count - 1];
|
|
||||||
eventData.Callbacks.RemoveAt(eventData.Callbacks.Count - 1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void FireEvent(string eventType, T arg1, U arg2, V arg3, W arg4)
|
|
||||||
{
|
|
||||||
object obj = _eventTable;
|
|
||||||
lock (obj)
|
|
||||||
{
|
|
||||||
if (_eventTable.TryGetValue(eventType, out var eventData))
|
|
||||||
{
|
|
||||||
if (eventData.IsInvoking)
|
|
||||||
{
|
|
||||||
throw new InvalidOperationException("GlobalMessenger does not support recursive FireEvent calls to the same eventType.");
|
|
||||||
}
|
|
||||||
|
|
||||||
eventData.IsInvoking = true;
|
|
||||||
eventData.Temp.AddRange(eventData.Callbacks);
|
|
||||||
for (var i = 0; i < eventData.Temp.Count; i++)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
eventData.Temp[i](arg1, arg2, arg3, arg4);
|
|
||||||
}
|
|
||||||
catch (Exception exception)
|
|
||||||
{
|
|
||||||
DebugLog.ToConsole($"Error - {exception.Message}", MessageType.Error);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
eventData.Temp.Clear();
|
|
||||||
eventData.IsInvoking = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static readonly IDictionary<string, EventData> _eventTable = new Dictionary<string, EventData>(ComparerLibrary.stringEqComparer);
|
|
||||||
|
|
||||||
private class EventData
|
|
||||||
{
|
|
||||||
public List<Callback<T, U, V, W>> Callbacks = new();
|
|
||||||
public List<Callback<T, U, V, W>> Temp = new();
|
|
||||||
public bool IsInvoking;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,82 +0,0 @@
|
|||||||
using OWML.Common;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
|
|
||||||
namespace QSB.Utility
|
|
||||||
{
|
|
||||||
public static class GlobalMessenger<T, U, V, W, X>
|
|
||||||
{
|
|
||||||
public static void AddListener(string eventType, Callback<T, U, V, W, X> handler)
|
|
||||||
{
|
|
||||||
object obj = _eventTable;
|
|
||||||
lock (obj)
|
|
||||||
{
|
|
||||||
if (!_eventTable.TryGetValue(eventType, out var eventData))
|
|
||||||
{
|
|
||||||
eventData = new EventData();
|
|
||||||
_eventTable.Add(eventType, eventData);
|
|
||||||
}
|
|
||||||
|
|
||||||
eventData.Callbacks.Add(handler);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void RemoveListener(string eventType, Callback<T, U, V, W, X> handler)
|
|
||||||
{
|
|
||||||
object obj = _eventTable;
|
|
||||||
lock (obj)
|
|
||||||
{
|
|
||||||
if (_eventTable.TryGetValue(eventType, out var eventData))
|
|
||||||
{
|
|
||||||
var num = eventData.Callbacks.IndexOf(handler);
|
|
||||||
if (num >= 0)
|
|
||||||
{
|
|
||||||
eventData.Callbacks[num] = eventData.Callbacks[eventData.Callbacks.Count - 1];
|
|
||||||
eventData.Callbacks.RemoveAt(eventData.Callbacks.Count - 1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void FireEvent(string eventType, T arg1, U arg2, V arg3, W arg4, X arg5)
|
|
||||||
{
|
|
||||||
object obj = _eventTable;
|
|
||||||
lock (obj)
|
|
||||||
{
|
|
||||||
if (_eventTable.TryGetValue(eventType, out var eventData))
|
|
||||||
{
|
|
||||||
if (eventData.IsInvoking)
|
|
||||||
{
|
|
||||||
throw new InvalidOperationException("GlobalMessenger does not support recursive FireEvent calls to the same eventType.");
|
|
||||||
}
|
|
||||||
|
|
||||||
eventData.IsInvoking = true;
|
|
||||||
eventData.Temp.AddRange(eventData.Callbacks);
|
|
||||||
for (var i = 0; i < eventData.Temp.Count; i++)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
eventData.Temp[i](arg1, arg2, arg3, arg4, arg5);
|
|
||||||
}
|
|
||||||
catch (Exception exception)
|
|
||||||
{
|
|
||||||
DebugLog.ToConsole($"Error - {exception.Message}", MessageType.Error);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
eventData.Temp.Clear();
|
|
||||||
eventData.IsInvoking = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static readonly IDictionary<string, EventData> _eventTable = new Dictionary<string, EventData>(ComparerLibrary.stringEqComparer);
|
|
||||||
|
|
||||||
private class EventData
|
|
||||||
{
|
|
||||||
public List<Callback<T, U, V, W, X>> Callbacks = new();
|
|
||||||
public List<Callback<T, U, V, W, X>> Temp = new();
|
|
||||||
public bool IsInvoking;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,82 +0,0 @@
|
|||||||
using OWML.Common;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
|
|
||||||
namespace QSB.Utility
|
|
||||||
{
|
|
||||||
public static class GlobalMessenger<T, U, V, W, X, Y>
|
|
||||||
{
|
|
||||||
public static void AddListener(string eventType, Callback<T, U, V, W, X, Y> handler)
|
|
||||||
{
|
|
||||||
object obj = _eventTable;
|
|
||||||
lock (obj)
|
|
||||||
{
|
|
||||||
if (!_eventTable.TryGetValue(eventType, out var eventData))
|
|
||||||
{
|
|
||||||
eventData = new EventData();
|
|
||||||
_eventTable.Add(eventType, eventData);
|
|
||||||
}
|
|
||||||
|
|
||||||
eventData.Callbacks.Add(handler);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void RemoveListener(string eventType, Callback<T, U, V, W, X, Y> handler)
|
|
||||||
{
|
|
||||||
object obj = _eventTable;
|
|
||||||
lock (obj)
|
|
||||||
{
|
|
||||||
if (_eventTable.TryGetValue(eventType, out var eventData))
|
|
||||||
{
|
|
||||||
var num = eventData.Callbacks.IndexOf(handler);
|
|
||||||
if (num >= 0)
|
|
||||||
{
|
|
||||||
eventData.Callbacks[num] = eventData.Callbacks[eventData.Callbacks.Count - 1];
|
|
||||||
eventData.Callbacks.RemoveAt(eventData.Callbacks.Count - 1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void FireEvent(string eventType, T arg1, U arg2, V arg3, W arg4, X arg5, Y arg6)
|
|
||||||
{
|
|
||||||
object obj = _eventTable;
|
|
||||||
lock (obj)
|
|
||||||
{
|
|
||||||
if (_eventTable.TryGetValue(eventType, out var eventData))
|
|
||||||
{
|
|
||||||
if (eventData.IsInvoking)
|
|
||||||
{
|
|
||||||
throw new InvalidOperationException("GlobalMessenger does not support recursive FireEvent calls to the same eventType.");
|
|
||||||
}
|
|
||||||
|
|
||||||
eventData.IsInvoking = true;
|
|
||||||
eventData.Temp.AddRange(eventData.Callbacks);
|
|
||||||
for (var i = 0; i < eventData.Temp.Count; i++)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
eventData.Temp[i](arg1, arg2, arg3, arg4, arg5, arg6);
|
|
||||||
}
|
|
||||||
catch (Exception exception)
|
|
||||||
{
|
|
||||||
DebugLog.ToConsole($"Error - {exception.Message}", MessageType.Error);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
eventData.Temp.Clear();
|
|
||||||
eventData.IsInvoking = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static readonly IDictionary<string, EventData> _eventTable = new Dictionary<string, EventData>(ComparerLibrary.stringEqComparer);
|
|
||||||
|
|
||||||
private class EventData
|
|
||||||
{
|
|
||||||
public List<Callback<T, U, V, W, X, Y>> Callbacks = new();
|
|
||||||
public List<Callback<T, U, V, W, X, Y>> Temp = new();
|
|
||||||
public bool IsInvoking;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
x
Reference in New Issue
Block a user