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
@@ -0,0 +1,69 @@
1
+ #if UNITY_2021_3_OR_NEWER
2
+ namespace DxMessaging.Tests.Runtime.Core
3
+ {
4
+ using System;
5
+ using System.Reflection;
6
+ using DxMessaging.Core;
7
+ using DxMessaging.Core.Helper;
8
+ using DxMessaging.Core.MessageBus;
9
+ using DxMessaging.Core.Messages;
10
+ using NUnit.Framework;
11
+
12
+ public sealed class DxMessagingStaticStateTests
13
+ {
14
+ [Test]
15
+ public void ResetRestoresDefaultStaticState()
16
+ {
17
+ DxMessagingStaticState.Reset();
18
+ IMessageBus baselineBus = MessageHandler.MessageBus;
19
+ MessageRegistrationHandle baselineHandle =
20
+ MessageRegistrationHandle.CreateMessageRegistrationHandle();
21
+
22
+ MessageRegistrationHandle.CreateMessageRegistrationHandle();
23
+ MessagingDebug.enabled = true;
24
+ MessagingDebug.LogFunction = (logLevel, message) => { };
25
+
26
+ IMessageBus.GlobalDiagnosticsTargets = DiagnosticsTarget.All;
27
+ IMessageBus.GlobalMessageBufferSize = 128;
28
+ IMessageBus.GlobalSequentialIndex = 7;
29
+
30
+ Type builderType = typeof(MessageRegistrationBuilder);
31
+ FieldInfo syntheticOwnerField = builderType.GetField(
32
+ "_syntheticOwnerCounter",
33
+ BindingFlags.NonPublic | BindingFlags.Static
34
+ );
35
+ Assert.IsNotNull(syntheticOwnerField);
36
+ syntheticOwnerField.SetValue(null, 3);
37
+
38
+ MessageCache<object> cache = new MessageCache<object>();
39
+ cache.GetOrAdd<DummyUntargetedMessage>();
40
+
41
+ MessageHandler.SetGlobalMessageBus(new MessageBus());
42
+
43
+ DxMessagingStaticState.Reset();
44
+
45
+ Assert.IsFalse(MessagingDebug.enabled);
46
+ Assert.IsNull(MessagingDebug.LogFunction);
47
+ Assert.AreEqual(DiagnosticsTarget.Off, IMessageBus.GlobalDiagnosticsTargets);
48
+ Assert.AreEqual(0, IMessageBus.GlobalMessageBufferSize);
49
+ Assert.AreEqual(-1, IMessageBus.GlobalSequentialIndex);
50
+
51
+ MessageRegistrationHandle resetHandle =
52
+ MessageRegistrationHandle.CreateMessageRegistrationHandle();
53
+ Assert.AreEqual(baselineHandle, resetHandle);
54
+
55
+ object syntheticOwnerValue = syntheticOwnerField.GetValue(null);
56
+ Assert.AreEqual(0, (int)syntheticOwnerValue);
57
+
58
+ Assert.AreEqual(0, MessageHelperIndexer.TotalMessages);
59
+ Assert.AreEqual(-1, MessageHelperIndexer<DummyUntargetedMessage>.SequentialId);
60
+ Assert.AreSame(MessageHandler.InitialGlobalMessageBus, MessageHandler.MessageBus);
61
+ Assert.AreSame(baselineBus, MessageHandler.MessageBus);
62
+
63
+ DxMessagingStaticState.Reset();
64
+ }
65
+
66
+ private struct DummyUntargetedMessage : IUntargetedMessage { }
67
+ }
68
+ }
69
+ #endif
@@ -0,0 +1,11 @@
1
+ fileFormatVersion: 2
2
+ guid: 5a3c452f2f1b48a1b66e8a7a05d3b7a8
3
+ MonoImporter:
4
+ externalObjects: {}
5
+ serializedVersion: 2
6
+ defaultReferences: []
7
+ executionOrder: 0
8
+ icon: {instanceID: 0}
9
+ userData:
10
+ assetBundleName:
11
+ assetBundleVariant:
@@ -33,9 +33,7 @@ namespace DxMessaging.Tests.Runtime.Core.Extensions
33
33
  MessageHandler handler = new MessageHandler(new InstanceId(10), bus) { active = true };
34
34
  MessageRegistrationToken token = MessageRegistrationToken.Create(handler, bus);
35
35
  int count = 0;
36
- _ = token.RegisterUntargeted<ClassUntargetedMessage>(
37
- (ref ClassUntargetedMessage _) => count++
38
- );
36
+ _ = token.RegisterUntargeted((ref ClassUntargetedMessage _) => count++);
39
37
  token.Enable();
40
38
 
41
39
  ClassUntargetedMessage message = new ClassUntargetedMessage();
@@ -52,9 +50,7 @@ namespace DxMessaging.Tests.Runtime.Core.Extensions
52
50
  MessageHandler handler = new MessageHandler(new InstanceId(20), bus) { active = true };
53
51
  MessageRegistrationToken token = MessageRegistrationToken.Create(handler, bus);
54
52
  int count = 0;
55
- _ = token.RegisterUntargeted<StructUntargetedMessage>(
56
- (ref StructUntargetedMessage _) => count++
57
- );
53
+ _ = token.RegisterUntargeted((ref StructUntargetedMessage _) => count++);
58
54
  token.Enable();
59
55
 
60
56
  StructUntargetedMessage message = new StructUntargetedMessage(1);
@@ -73,7 +69,7 @@ namespace DxMessaging.Tests.Runtime.Core.Extensions
73
69
  StructInterceptedMessage intercepted = default;
74
70
  int postProcessCount = 0;
75
71
 
76
- _ = bus.RegisterUntargetedInterceptor<StructInterceptedMessage>(
72
+ _ = bus.RegisterUntargetedInterceptor(
77
73
  (ref StructInterceptedMessage msg) =>
78
74
  {
79
75
  msg.Value += 10;
@@ -81,11 +77,9 @@ namespace DxMessaging.Tests.Runtime.Core.Extensions
81
77
  }
82
78
  );
83
79
 
84
- _ = token.RegisterUntargeted<StructInterceptedMessage>(
85
- (ref StructInterceptedMessage msg) => intercepted = msg
86
- );
80
+ _ = token.RegisterUntargeted((ref StructInterceptedMessage msg) => intercepted = msg);
87
81
 
88
- _ = token.RegisterUntargetedPostProcessor<StructInterceptedMessage>(
82
+ _ = token.RegisterUntargetedPostProcessor(
89
83
  (ref StructInterceptedMessage _) => postProcessCount++
90
84
  );
91
85
 
@@ -108,9 +102,7 @@ namespace DxMessaging.Tests.Runtime.Core.Extensions
108
102
  MessageRegistrationToken token = MessageRegistrationToken.Create(handler, bus);
109
103
  int busSum = 0;
110
104
 
111
- _ = token.RegisterUntargeted<StructUntargetedMessage>(
112
- (ref StructUntargetedMessage msg) => busSum += msg.Value
113
- );
105
+ _ = token.RegisterUntargeted((ref StructUntargetedMessage msg) => busSum += msg.Value);
114
106
 
115
107
  token.Enable();
116
108
 
@@ -132,7 +124,7 @@ namespace DxMessaging.Tests.Runtime.Core.Extensions
132
124
  MessageRegistrationToken token2 = MessageRegistrationToken.Create(handler2, bus);
133
125
  int messageSum = 0;
134
126
 
135
- _ = token2.RegisterUntargeted<StructUntargetedMessage>(
127
+ _ = token2.RegisterUntargeted(
136
128
  (ref StructUntargetedMessage msg) => messageSum += msg.Value
137
129
  );
138
130
 
@@ -158,10 +150,7 @@ namespace DxMessaging.Tests.Runtime.Core.Extensions
158
150
  MessageHandler handler = new MessageHandler(new InstanceId(30), bus) { active = true };
159
151
  MessageRegistrationToken token = MessageRegistrationToken.Create(handler, bus);
160
152
  int count = 0;
161
- _ = token.RegisterTargeted<StructTargetedMessage>(
162
- target,
163
- (ref StructTargetedMessage _) => count++
164
- );
153
+ _ = token.RegisterTargeted(target, (ref StructTargetedMessage _) => count++);
165
154
  token.Enable();
166
155
 
167
156
  StructTargetedMessage message = new StructTargetedMessage(5);
@@ -180,10 +169,7 @@ namespace DxMessaging.Tests.Runtime.Core.Extensions
180
169
  MessageHandler handler = new MessageHandler(new InstanceId(40), bus) { active = true };
181
170
  MessageRegistrationToken token = MessageRegistrationToken.Create(handler, bus);
182
171
  int count = 0;
183
- _ = token.RegisterBroadcast<StructBroadcastMessage>(
184
- source,
185
- (ref StructBroadcastMessage _) => count++
186
- );
172
+ _ = token.RegisterBroadcast(source, (ref StructBroadcastMessage _) => count++);
187
173
  token.Enable();
188
174
 
189
175
  StructBroadcastMessage message = new StructBroadcastMessage(7);
@@ -206,19 +192,14 @@ namespace DxMessaging.Tests.Runtime.Core.Extensions
206
192
  string broadcast = null;
207
193
  string untargeted = null;
208
194
 
209
- _ = token.RegisterTargeted<StringMessage>(
210
- target,
211
- (ref StringMessage m) => targeted = m.message
212
- );
195
+ _ = token.RegisterTargeted(target, (ref StringMessage m) => targeted = m.message);
213
196
 
214
- _ = token.RegisterBroadcast<SourcedStringMessage>(
197
+ _ = token.RegisterBroadcast(
215
198
  source,
216
199
  (ref SourcedStringMessage m) => broadcast = m.message
217
200
  );
218
201
 
219
- _ = token.RegisterUntargeted<GlobalStringMessage>(
220
- (ref GlobalStringMessage m) => untargeted = m.message
221
- );
202
+ _ = token.RegisterUntargeted((ref GlobalStringMessage m) => untargeted = m.message);
222
203
 
223
204
  token.Enable();
224
205