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.
Files changed (67) hide show
  1. package/.github/workflows/dotnet-tests.yml +3 -3
  2. package/.github/workflows/prettier-autofix.yml +0 -7
  3. package/.pre-commit-config.yaml +8 -5
  4. package/AGENTS.md +12 -12
  5. package/CONTRIBUTING.md +8 -2
  6. package/Docs/Comparisons.md +5 -5
  7. package/Docs/InterceptorsAndOrdering.md +1 -1
  8. package/Docs/Performance.md +13 -13
  9. package/Docs/QuickReference.md +1 -1
  10. package/Docs/Reference.md +5 -5
  11. package/Editor/Analyzers/WallstopStudios.DxMessaging.SourceGenerators.dll +0 -0
  12. package/Editor/CustomEditors/MessagingComponentEditor.cs +3 -0
  13. package/Editor/DxMessagingEditorInitializer.cs +58 -1
  14. package/Editor/DxMessagingMenu.cs +38 -0
  15. package/Editor/DxMessagingMenu.cs.meta +11 -0
  16. package/Editor/DxMessagingSceneBuildProcessor.cs +81 -0
  17. package/Editor/DxMessagingSceneBuildProcessor.cs.meta +11 -0
  18. package/Editor/Settings/DxMessagingSettings.cs +37 -6
  19. package/Editor/Settings/DxMessagingSettingsProvider.cs +45 -7
  20. package/README.md +1 -1
  21. package/Runtime/Core/Attributes/DxOptionalParameterAttribute.cs +52 -0
  22. package/Runtime/Core/DataStructure/CyclicBuffer.cs +16 -0
  23. package/Runtime/Core/Diagnostics/MessageEmissionData.cs +1 -1
  24. package/Runtime/Core/Diagnostics/MessageRegistrationType.cs +62 -0
  25. package/Runtime/Core/DxMessagingStaticState.cs +108 -0
  26. package/Runtime/Core/DxMessagingStaticState.cs.meta +11 -0
  27. package/Runtime/Core/Extensions/IListExtensions.cs +24 -0
  28. package/Runtime/Core/Extensions/MessageBusExtensions.cs +142 -0
  29. package/Runtime/Core/Helper/MessageCache.cs +16 -0
  30. package/Runtime/Core/Helper/MessageHelperIndexer.cs +77 -0
  31. package/Runtime/Core/InstanceId.cs +86 -0
  32. package/Runtime/Core/MessageBus/DiagnosticsTarget.cs +31 -0
  33. package/Runtime/Core/MessageBus/DiagnosticsTarget.cs.meta +11 -0
  34. package/Runtime/Core/MessageBus/IMessageBus.cs +44 -16
  35. package/Runtime/Core/MessageBus/MessageBus.cs +167 -180
  36. package/Runtime/Core/MessageBus/MessageRegistrationBuilder.cs +44 -0
  37. package/Runtime/Core/MessageBus/MessagingRegistration.cs +60 -2
  38. package/Runtime/Core/MessageBus/RegistrationLog.cs +10 -0
  39. package/Runtime/Core/MessageHandler.cs +107 -6
  40. package/Runtime/Core/MessageRegistrationHandle.cs +59 -0
  41. package/Runtime/Core/MessageRegistrationToken.cs +18 -2
  42. package/Runtime/Core/Messages/ReflexiveMessage.cs +38 -0
  43. package/Runtime/Core/MessagingDebug.cs +16 -1
  44. package/Runtime/Unity/CurrentGlobalMessageBusProvider.cs +4 -0
  45. package/Runtime/Unity/DxMessagingRuntimeInitializer.cs +19 -0
  46. package/Runtime/Unity/DxMessagingRuntimeInitializer.cs.meta +11 -0
  47. package/Runtime/Unity/InitialGlobalMessageBusProvider.cs +4 -0
  48. package/Runtime/Unity/Integrations/Reflex/ReflexRegistrationInstaller.cs +17 -0
  49. package/Runtime/Unity/Integrations/VContainer/VContainerRegistrationExtensions.cs +8 -0
  50. package/Runtime/Unity/Integrations/Zenject/ZenjectRegistrationInstaller.cs +12 -0
  51. package/Runtime/Unity/MessagingComponent.cs +93 -0
  52. package/Samples~/DI/README.md +13 -13
  53. package/Samples~/Mini Combat/README.md +15 -15
  54. package/Samples~/Mini Combat/Walkthrough.md +12 -12
  55. package/Samples~/UI Buttons + Inspector/README.md +4 -4
  56. package/SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators/DxAutoConstructorGenerator.cs +4 -0
  57. package/SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators/DxMessageIdGenerator.cs +4 -0
  58. package/Tests/Runtime/Core/DiagnosticsTests.cs +3 -3
  59. package/Tests/Runtime/Core/DxMessagingStaticStateTests.cs +69 -0
  60. package/Tests/Runtime/Core/DxMessagingStaticStateTests.cs.meta +11 -0
  61. package/Tests/Runtime/Core/Extensions/MessageBusExtensionsTests.cs +12 -31
  62. package/Tests/Runtime/Core/OrderingManyRegistrationsTests.cs +683 -0
  63. package/Tests/Runtime/Core/OrderingManyRegistrationsTests.cs.meta +11 -0
  64. package/package.json +1 -1
  65. package/scripts/fix-eol.js +38 -3
  66. package/Tests/Runtime/WallstopStudios.DxMessaging.Tests.Runtime.csproj +0 -20
  67. 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
- public static bool GlobalDiagnosticsMode { get; set; }
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
- public static int GlobalMessageBufferSize { get; set; }
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
- public bool DiagnosticsMode { get; }
93
+ bool DiagnosticsMode { get; }
62
94
 
63
- public int RegisteredGlobalSequentialIndex { get; }
64
- public int RegisteredBroadcast { get; }
95
+ int RegisteredGlobalSequentialIndex { get; }
96
+ int RegisteredBroadcast { get; }
65
97
 
66
- public int RegisteredTargeted { get; }
98
+ int RegisteredTargeted { get; }
67
99
 
68
- public int RegisteredUntargeted { get; }
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
- public delegate bool UntargetedInterceptor<TMessage>(ref TMessage message)
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
- public delegate bool TargetedInterceptor<TMessage>(
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
- public delegate bool BroadcastInterceptor<TMessage>(
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,