com.wallstop-studios.dxmessaging 2.1.2 → 2.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/dotnet-tests.yml +3 -3
- package/.github/workflows/prettier-autofix.yml +0 -7
- package/.pre-commit-config.yaml +8 -5
- package/AGENTS.md +12 -12
- package/CONTRIBUTING.md +8 -2
- package/Docs/Comparisons.md +5 -5
- package/Docs/InterceptorsAndOrdering.md +1 -1
- package/Docs/Performance.md +13 -13
- package/Docs/QuickReference.md +1 -1
- package/Docs/Reference.md +5 -5
- package/Editor/Analyzers/WallstopStudios.DxMessaging.SourceGenerators.dll +0 -0
- package/Editor/CustomEditors/MessagingComponentEditor.cs +3 -0
- package/Editor/DxMessagingEditorInitializer.cs +58 -1
- package/Editor/DxMessagingMenu.cs +38 -0
- package/Editor/DxMessagingMenu.cs.meta +11 -0
- package/Editor/DxMessagingSceneBuildProcessor.cs +81 -0
- package/Editor/DxMessagingSceneBuildProcessor.cs.meta +11 -0
- package/Editor/Settings/DxMessagingSettings.cs +37 -6
- package/Editor/Settings/DxMessagingSettingsProvider.cs +45 -7
- package/README.md +1 -1
- package/Runtime/Core/Attributes/DxOptionalParameterAttribute.cs +52 -0
- package/Runtime/Core/DataStructure/CyclicBuffer.cs +16 -0
- package/Runtime/Core/Diagnostics/MessageEmissionData.cs +1 -1
- package/Runtime/Core/Diagnostics/MessageRegistrationType.cs +62 -0
- package/Runtime/Core/DxMessagingStaticState.cs +108 -0
- package/Runtime/Core/DxMessagingStaticState.cs.meta +11 -0
- package/Runtime/Core/Extensions/IListExtensions.cs +24 -0
- package/Runtime/Core/Extensions/MessageBusExtensions.cs +142 -0
- package/Runtime/Core/Helper/MessageCache.cs +16 -0
- package/Runtime/Core/Helper/MessageHelperIndexer.cs +77 -0
- package/Runtime/Core/InstanceId.cs +86 -0
- package/Runtime/Core/MessageBus/DiagnosticsTarget.cs +31 -0
- package/Runtime/Core/MessageBus/DiagnosticsTarget.cs.meta +11 -0
- package/Runtime/Core/MessageBus/IMessageBus.cs +44 -16
- package/Runtime/Core/MessageBus/MessageBus.cs +167 -180
- package/Runtime/Core/MessageBus/MessageRegistrationBuilder.cs +44 -0
- package/Runtime/Core/MessageBus/MessagingRegistration.cs +60 -2
- package/Runtime/Core/MessageBus/RegistrationLog.cs +10 -0
- package/Runtime/Core/MessageHandler.cs +107 -6
- package/Runtime/Core/MessageRegistrationHandle.cs +59 -0
- package/Runtime/Core/MessageRegistrationToken.cs +18 -2
- package/Runtime/Core/Messages/ReflexiveMessage.cs +38 -0
- package/Runtime/Core/MessagingDebug.cs +16 -1
- package/Runtime/Unity/CurrentGlobalMessageBusProvider.cs +4 -0
- package/Runtime/Unity/DxMessagingRuntimeInitializer.cs +19 -0
- package/Runtime/Unity/DxMessagingRuntimeInitializer.cs.meta +11 -0
- package/Runtime/Unity/InitialGlobalMessageBusProvider.cs +4 -0
- package/Runtime/Unity/Integrations/Reflex/ReflexRegistrationInstaller.cs +17 -0
- package/Runtime/Unity/Integrations/VContainer/VContainerRegistrationExtensions.cs +8 -0
- package/Runtime/Unity/Integrations/Zenject/ZenjectRegistrationInstaller.cs +12 -0
- package/Runtime/Unity/MessagingComponent.cs +93 -0
- package/Samples~/DI/README.md +13 -13
- package/Samples~/Mini Combat/README.md +15 -15
- package/Samples~/Mini Combat/Walkthrough.md +12 -12
- package/Samples~/UI Buttons + Inspector/README.md +4 -4
- package/SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators/DxAutoConstructorGenerator.cs +4 -0
- package/SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators/DxMessageIdGenerator.cs +4 -0
- package/Tests/Runtime/Core/DiagnosticsTests.cs +3 -3
- package/Tests/Runtime/Core/DxMessagingStaticStateTests.cs +69 -0
- package/Tests/Runtime/Core/DxMessagingStaticStateTests.cs.meta +11 -0
- package/Tests/Runtime/Core/Extensions/MessageBusExtensionsTests.cs +12 -31
- package/Tests/Runtime/Core/OrderingManyRegistrationsTests.cs +683 -0
- package/Tests/Runtime/Core/OrderingManyRegistrationsTests.cs.meta +11 -0
- package/package.json +1 -1
- package/scripts/fix-eol.js +38 -3
- package/Tests/Runtime/WallstopStudios.DxMessaging.Tests.Runtime.csproj +0 -20
- package/Tests/Runtime/WallstopStudios.DxMessaging.Tests.Runtime.csproj.meta +0 -7
|
@@ -3,7 +3,11 @@ namespace DxMessaging.Core.MessageBus
|
|
|
3
3
|
using System;
|
|
4
4
|
using System.Threading;
|
|
5
5
|
using Core;
|
|
6
|
+
using Extensions;
|
|
6
7
|
using Messages;
|
|
8
|
+
#if UNITY_2021_3_OR_NEWER
|
|
9
|
+
using UnityEngine;
|
|
10
|
+
#endif
|
|
7
11
|
|
|
8
12
|
/// <summary>
|
|
9
13
|
/// Contract for a general-purpose message bus handling registration and dispatch.
|
|
@@ -41,31 +45,59 @@ namespace DxMessaging.Core.MessageBus
|
|
|
41
45
|
/// <summary>
|
|
42
46
|
/// Default diagnostics mode for newly created buses and tokens.
|
|
43
47
|
/// </summary>
|
|
44
|
-
|
|
48
|
+
static DiagnosticsTarget GlobalDiagnosticsTargets { get; set; } = DiagnosticsTarget.Off;
|
|
49
|
+
|
|
50
|
+
[Obsolete("Use GlobalDiagnosticsTargets instead.")]
|
|
51
|
+
static bool GlobalDiagnosticsMode
|
|
52
|
+
{
|
|
53
|
+
get => GlobalDiagnosticsTargets != DiagnosticsTarget.Off;
|
|
54
|
+
set => GlobalDiagnosticsTargets = value ? DiagnosticsTarget.All : DiagnosticsTarget.Off;
|
|
55
|
+
}
|
|
45
56
|
|
|
46
57
|
long EmissionId { get; }
|
|
47
58
|
|
|
48
59
|
/// <summary>
|
|
49
60
|
/// Default ring buffer size for emission history when diagnostics are enabled.
|
|
50
61
|
/// </summary>
|
|
51
|
-
|
|
62
|
+
static int GlobalMessageBufferSize { get; set; }
|
|
52
63
|
|
|
53
64
|
internal static int GlobalSequentialIndex = -1;
|
|
54
65
|
|
|
55
66
|
protected static int GenerateNewGlobalSequentialIndex() =>
|
|
56
67
|
Interlocked.Increment(ref GlobalSequentialIndex);
|
|
57
68
|
|
|
69
|
+
internal static bool ShouldEnableDiagnostics()
|
|
70
|
+
{
|
|
71
|
+
DiagnosticsTarget targets = GlobalDiagnosticsTargets;
|
|
72
|
+
if (targets == DiagnosticsTarget.Off)
|
|
73
|
+
{
|
|
74
|
+
return false;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
#if UNITY_2021_3_OR_NEWER
|
|
78
|
+
if (Application.isEditor)
|
|
79
|
+
{
|
|
80
|
+
return targets.HasFlagNoAlloc(DiagnosticsTarget.Editor)
|
|
81
|
+
|| targets.HasFlagNoAlloc(DiagnosticsTarget.Runtime);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
return targets.HasFlagNoAlloc(DiagnosticsTarget.Editor);
|
|
85
|
+
#else
|
|
86
|
+
return targets.HasFlagNoAlloc(DiagnosticsTarget.Runtime);
|
|
87
|
+
#endif
|
|
88
|
+
}
|
|
89
|
+
|
|
58
90
|
/// <summary>
|
|
59
91
|
/// Whether diagnostics are recorded for this bus instance.
|
|
60
92
|
/// </summary>
|
|
61
|
-
|
|
93
|
+
bool DiagnosticsMode { get; }
|
|
62
94
|
|
|
63
|
-
|
|
64
|
-
|
|
95
|
+
int RegisteredGlobalSequentialIndex { get; }
|
|
96
|
+
int RegisteredBroadcast { get; }
|
|
65
97
|
|
|
66
|
-
|
|
98
|
+
int RegisteredTargeted { get; }
|
|
67
99
|
|
|
68
|
-
|
|
100
|
+
int RegisteredUntargeted { get; }
|
|
69
101
|
|
|
70
102
|
/// <summary>
|
|
71
103
|
/// Interceptor delegate for untargeted messages to transform or cancel them.
|
|
@@ -73,7 +105,7 @@ namespace DxMessaging.Core.MessageBus
|
|
|
73
105
|
/// <typeparam name="TMessage">Specific type of message.</typeparam>
|
|
74
106
|
/// <param name="message">Message to consider.</param>
|
|
75
107
|
/// <returns>True if the message should be processed, false if it should be skipped.</returns>
|
|
76
|
-
|
|
108
|
+
delegate bool UntargetedInterceptor<TMessage>(ref TMessage message)
|
|
77
109
|
where TMessage : IUntargetedMessage;
|
|
78
110
|
|
|
79
111
|
/// <summary>
|
|
@@ -83,10 +115,7 @@ namespace DxMessaging.Core.MessageBus
|
|
|
83
115
|
/// <param name="target">Target of the message.</param>
|
|
84
116
|
/// <param name="message">Message to consider.</param>
|
|
85
117
|
/// <returns>True if the message should be processed, false if it should be skipped.</returns>
|
|
86
|
-
|
|
87
|
-
ref InstanceId target,
|
|
88
|
-
ref TMessage message
|
|
89
|
-
)
|
|
118
|
+
delegate bool TargetedInterceptor<TMessage>(ref InstanceId target, ref TMessage message)
|
|
90
119
|
where TMessage : ITargetedMessage;
|
|
91
120
|
|
|
92
121
|
/// <summary>
|
|
@@ -96,10 +125,7 @@ namespace DxMessaging.Core.MessageBus
|
|
|
96
125
|
/// <param name="source">Source of the message.</param>
|
|
97
126
|
/// <param name="message">Message to consider.</param>
|
|
98
127
|
/// <returns>True if the message should be processed, false if it should be skipped.</returns>
|
|
99
|
-
|
|
100
|
-
ref InstanceId source,
|
|
101
|
-
ref TMessage message
|
|
102
|
-
)
|
|
128
|
+
delegate bool BroadcastInterceptor<TMessage>(ref InstanceId source, ref TMessage message)
|
|
103
129
|
where TMessage : IBroadcastMessage;
|
|
104
130
|
|
|
105
131
|
/// <summary>
|
|
@@ -149,6 +175,7 @@ namespace DxMessaging.Core.MessageBus
|
|
|
149
175
|
/// <typeparam name="T">Type of the BroadcastMessage to register.</typeparam>
|
|
150
176
|
/// <param name="source">InstanceId of the source for BroadcastMessages to listen to.</param>
|
|
151
177
|
/// <param name="messageHandler">MessageHandler to register to accept BroadcastMessages.</param>
|
|
178
|
+
/// <param name="priority"></param>
|
|
152
179
|
/// <returns>The deregistration action. Should be invoked when the handler no longer wants to receive messages.</returns>
|
|
153
180
|
Action RegisterSourcedBroadcast<T>(
|
|
154
181
|
InstanceId source,
|
|
@@ -163,6 +190,7 @@ namespace DxMessaging.Core.MessageBus
|
|
|
163
190
|
/// </summary>
|
|
164
191
|
/// <typeparam name="T">Type of the BroadcastMessage to register.</typeparam>
|
|
165
192
|
/// <param name="messageHandler">MessageHandler to register to accept BroadcastMessages.</param>
|
|
193
|
+
/// <param name="priority"></param>
|
|
166
194
|
/// <returns>The deregistration action. Should be invoked when the handler no longer wants to receive messages.</returns>
|
|
167
195
|
Action RegisterSourcedBroadcastWithoutSource<T>(
|
|
168
196
|
MessageHandler messageHandler,
|