com.wallstop-studios.dxmessaging 2.2.0 → 3.1.0
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/CHANGELOG.md +315 -67
- package/CHANGELOG.md.meta +7 -7
- package/Editor/Analyzers/BaseCallIlInspector.cs +277 -0
- package/Editor/Analyzers/BaseCallIlInspector.cs.meta +11 -0
- package/Editor/Analyzers/BaseCallLogMessageParser.cs +295 -0
- package/Editor/Analyzers/BaseCallLogMessageParser.cs.meta +11 -0
- package/Editor/Analyzers/BaseCallReportAggregator.cs +308 -0
- package/Editor/Analyzers/BaseCallReportAggregator.cs.meta +11 -0
- package/Editor/Analyzers/BaseCallTypeScanner.cs +110 -0
- package/Editor/Analyzers/BaseCallTypeScanner.cs.meta +11 -0
- package/Editor/Analyzers/BaseCallTypeScannerCore.cs +562 -0
- package/Editor/Analyzers/BaseCallTypeScannerCore.cs.meta +11 -0
- package/Editor/Analyzers/DxMessagingConsoleHarvester.cs +1129 -0
- package/Editor/Analyzers/DxMessagingConsoleHarvester.cs.meta +11 -0
- package/Editor/Analyzers/Microsoft.CodeAnalysis.CSharp.dll.meta +44 -44
- package/Editor/Analyzers/Microsoft.CodeAnalysis.dll.meta +44 -44
- package/Editor/Analyzers/System.Collections.Immutable.dll.meta +44 -44
- package/Editor/Analyzers/System.Reflection.Metadata.dll.meta +44 -44
- package/Editor/Analyzers/System.Runtime.CompilerServices.Unsafe.dll.meta +44 -44
- package/Editor/Analyzers/WallstopStudios.DxMessaging.Analyzer.dll +0 -0
- package/Editor/Analyzers/WallstopStudios.DxMessaging.Analyzer.dll.meta +46 -0
- package/Editor/Analyzers/WallstopStudios.DxMessaging.SourceGenerators.dll +0 -0
- package/Editor/Analyzers/WallstopStudios.DxMessaging.SourceGenerators.dll.meta +72 -72
- package/Editor/Analyzers.meta +8 -8
- package/Editor/AssemblyInfo.cs.meta +11 -3
- package/Editor/CustomEditors/MessageAwareComponentFallbackEditor.cs +81 -0
- package/Editor/CustomEditors/MessageAwareComponentFallbackEditor.cs.meta +11 -0
- package/Editor/CustomEditors/MessageAwareComponentInspectorOverlay.cs +429 -0
- package/Editor/CustomEditors/MessageAwareComponentInspectorOverlay.cs.meta +11 -0
- package/Editor/CustomEditors/MessagingComponentEditor.cs +1 -1
- package/Editor/CustomEditors/MessagingComponentEditor.cs.meta +11 -3
- package/Editor/CustomEditors.meta +2 -2
- package/Editor/DxMessagingEditorIdle.cs +62 -0
- package/Editor/DxMessagingEditorIdle.cs.meta +11 -0
- package/Editor/DxMessagingEditorInitializer.cs +112 -15
- package/Editor/DxMessagingEditorInitializer.cs.meta +11 -3
- package/Editor/DxMessagingEditorLog.cs +32 -0
- package/Editor/DxMessagingEditorLog.cs.meta +11 -0
- package/Editor/DxMessagingMenu.cs.meta +11 -11
- package/Editor/DxMessagingSceneBuildProcessor.cs.meta +11 -11
- package/Editor/Settings/DxMessagingBaseCallIgnoreSync.cs +313 -0
- package/Editor/Settings/DxMessagingBaseCallIgnoreSync.cs.meta +11 -0
- package/Editor/Settings/DxMessagingSettings.cs +261 -11
- package/Editor/Settings/DxMessagingSettings.cs.meta +11 -3
- package/Editor/Settings/DxMessagingSettingsProvider.cs +50 -33
- package/Editor/Settings/DxMessagingSettingsProvider.cs.meta +11 -3
- package/Editor/Settings.meta +2 -2
- package/Editor/SetupCscRsp.cs +406 -39
- package/Editor/SetupCscRsp.cs.meta +11 -3
- package/Editor/Testing/MessagingComponentEditorHarness.cs +2 -2
- package/Editor/Testing/MessagingComponentEditorHarness.cs.meta +11 -3
- package/Editor/Testing.meta +3 -3
- package/Editor/WallstopStudios.DxMessaging.Editor.asmdef +14 -14
- package/Editor/WallstopStudios.DxMessaging.Editor.asmdef.meta +7 -7
- package/Editor.meta +8 -8
- package/LICENSE.md +9 -9
- package/LICENSE.md.meta +7 -7
- package/README.md +940 -900
- package/README.md.meta +7 -7
- package/Runtime/AssemblyInfo.cs +4 -0
- package/Runtime/AssemblyInfo.cs.meta +11 -3
- package/Runtime/Core/Attributes/DxAutoConstructorAttribute.cs.meta +11 -3
- package/Runtime/Core/Attributes/DxBroadcastMessageAttribute.cs.meta +11 -3
- package/Runtime/Core/Attributes/DxIgnoreMissingBaseCallAttribute.cs +26 -0
- package/Runtime/Core/Attributes/DxIgnoreMissingBaseCallAttribute.cs.meta +11 -0
- package/Runtime/Core/Attributes/DxOptionalParameterAttribute.cs +2 -4
- package/Runtime/Core/Attributes/DxOptionalParameterAttribute.cs.meta +11 -3
- package/Runtime/Core/Attributes/DxTargetedMessageAttribute.cs.meta +11 -3
- package/Runtime/Core/Attributes/DxUntargetedMessageAttribute.cs.meta +11 -3
- package/Runtime/Core/Attributes/Il2CppSetOptionAttribute.cs +56 -0
- package/Runtime/Core/Attributes/Il2CppSetOptionAttribute.cs.meta +11 -0
- package/Runtime/Core/Attributes.meta +2 -2
- package/Runtime/Core/Configuration/DxMessagingRuntimeSettings.cs +195 -0
- package/Runtime/Core/Configuration/DxMessagingRuntimeSettings.cs.meta +11 -0
- package/Runtime/Core/Configuration/DxMessagingRuntimeSettingsProvider.cs +179 -0
- package/Runtime/Core/Configuration/DxMessagingRuntimeSettingsProvider.cs.meta +11 -0
- package/Runtime/Core/Configuration.meta +9 -0
- package/Runtime/Core/DataStructure/CyclicBuffer.cs +46 -28
- package/Runtime/Core/DataStructure/CyclicBuffer.cs.meta +11 -3
- package/Runtime/Core/DataStructure.meta +2 -2
- package/Runtime/Core/Diagnostics/MessageEmissionData.cs.meta +11 -3
- package/Runtime/Core/Diagnostics/MessageRegistrationData.cs.meta +11 -3
- package/Runtime/Core/Diagnostics/MessageRegistrationType.cs.meta +11 -3
- package/Runtime/Core/Diagnostics.meta +2 -2
- package/Runtime/Core/DxMessagingStaticState.cs +19 -0
- package/Runtime/Core/DxMessagingStaticState.cs.meta +11 -11
- package/Runtime/Core/Extensions/EnumExtensions.cs +6 -5
- package/Runtime/Core/Extensions/EnumExtensions.cs.meta +11 -3
- package/Runtime/Core/Extensions/IListExtensions.cs.meta +11 -3
- package/Runtime/Core/Extensions/MessageBusExtensions.cs.meta +12 -12
- package/Runtime/Core/Extensions/MessageExtensions.cs +0 -60
- package/Runtime/Core/Extensions/MessageExtensions.cs.meta +11 -11
- package/Runtime/Core/Extensions.meta +8 -8
- package/Runtime/Core/Helper/MessageCache.cs +32 -0
- package/Runtime/Core/Helper/MessageCache.cs.meta +11 -3
- package/Runtime/Core/Helper/MessageHelperIndexer.cs.meta +11 -3
- package/Runtime/Core/Helper.meta +2 -2
- package/Runtime/Core/IMessage.cs +3 -3
- package/Runtime/Core/IMessage.cs.meta +11 -11
- package/Runtime/Core/InstanceId.cs +25 -1
- package/Runtime/Core/InstanceId.cs.meta +11 -11
- package/Runtime/Core/Internal/DxUnsafe.cs +60 -0
- package/Runtime/Core/Internal/DxUnsafe.cs.meta +11 -0
- package/Runtime/Core/Internal/FlatDispatch.cs +198 -0
- package/Runtime/Core/Internal/FlatDispatch.cs.meta +11 -0
- package/Runtime/Core/Internal/TypedGlobalSlotIndex.cs +38 -0
- package/Runtime/Core/Internal/TypedGlobalSlotIndex.cs.meta +11 -0
- package/Runtime/Core/Internal/TypedSlotIndex.cs +81 -0
- package/Runtime/Core/Internal/TypedSlotIndex.cs.meta +11 -0
- package/Runtime/Core/Internal/TypedSlots.cs +597 -0
- package/Runtime/Core/Internal/TypedSlots.cs.meta +11 -0
- package/Runtime/Core/Internal.meta +9 -0
- package/Runtime/Core/MessageBus/DiagnosticsTarget.cs.meta +11 -11
- package/Runtime/Core/MessageBus/GlobalMessageBusProvider.cs.meta +11 -11
- package/Runtime/Core/MessageBus/IMessageBus.cs +189 -15
- package/Runtime/Core/MessageBus/IMessageBus.cs.meta +11 -11
- package/Runtime/Core/MessageBus/IMessageBusProvider.cs.meta +11 -11
- package/Runtime/Core/MessageBus/IMessageRegistrationBuilder.cs +1 -0
- package/Runtime/Core/MessageBus/IMessageRegistrationBuilder.cs.meta +11 -11
- package/Runtime/Core/MessageBus/Internal/BusContextIndex.cs +16 -0
- package/Runtime/Core/MessageBus/Internal/BusContextIndex.cs.meta +11 -0
- package/Runtime/Core/MessageBus/Internal/BusSinkIndex.cs +40 -0
- package/Runtime/Core/MessageBus/Internal/BusSinkIndex.cs.meta +11 -0
- package/Runtime/Core/MessageBus/Internal/BusSlots.cs +719 -0
- package/Runtime/Core/MessageBus/Internal/BusSlots.cs.meta +11 -0
- package/Runtime/Core/MessageBus/Internal/DispatchKind.cs +38 -0
- package/Runtime/Core/MessageBus/Internal/DispatchKind.cs.meta +11 -0
- package/Runtime/Core/MessageBus/Internal/DispatchPhase.cs +20 -0
- package/Runtime/Core/MessageBus/Internal/DispatchPhase.cs.meta +11 -0
- package/Runtime/Core/MessageBus/Internal/DispatchVariant.cs +28 -0
- package/Runtime/Core/MessageBus/Internal/DispatchVariant.cs.meta +11 -0
- package/Runtime/Core/MessageBus/Internal/IEvictableSlot.cs +48 -0
- package/Runtime/Core/MessageBus/Internal/IEvictableSlot.cs.meta +11 -0
- package/Runtime/Core/MessageBus/Internal/ISweepable.cs +15 -0
- package/Runtime/Core/MessageBus/Internal/ISweepable.cs.meta +11 -0
- package/Runtime/Core/MessageBus/Internal/RegistrationMethodAxes.cs +222 -0
- package/Runtime/Core/MessageBus/Internal/RegistrationMethodAxes.cs.meta +11 -0
- package/Runtime/Core/MessageBus/Internal/SlotKey.cs +192 -0
- package/Runtime/Core/MessageBus/Internal/SlotKey.cs.meta +11 -0
- package/Runtime/Core/MessageBus/Internal.meta +9 -0
- package/Runtime/Core/MessageBus/MessageBus.cs +5366 -3838
- package/Runtime/Core/MessageBus/MessageBus.cs.meta +11 -11
- package/Runtime/Core/MessageBus/MessageBusRebindMode.cs.meta +11 -11
- package/Runtime/Core/MessageBus/MessageRegistrationBuilder.cs +187 -14
- package/Runtime/Core/MessageBus/MessageRegistrationBuilder.cs.meta +11 -11
- package/Runtime/Core/MessageBus/MessagingRegistration.cs.meta +11 -11
- package/Runtime/Core/MessageBus/RegistrationLog.cs.meta +11 -11
- package/Runtime/Core/MessageBus.meta +8 -8
- package/Runtime/Core/MessageHandler.cs +2399 -1042
- package/Runtime/Core/MessageHandler.cs.meta +11 -11
- package/Runtime/Core/MessageRegistrationHandle.cs.meta +11 -11
- package/Runtime/Core/MessageRegistrationToken.cs +429 -44
- package/Runtime/Core/MessageRegistrationToken.cs.meta +11 -11
- package/Runtime/Core/Messages/GlobalStringMessage.cs.meta +11 -3
- package/Runtime/Core/Messages/IBroadcastMessage.cs.meta +11 -11
- package/Runtime/Core/Messages/ITargetedMessage.cs.meta +11 -11
- package/Runtime/Core/Messages/IUntargetedMessage.cs.meta +11 -11
- package/Runtime/Core/Messages/ReflexiveMessage.cs.meta +11 -3
- package/Runtime/Core/Messages/SourcedStringMessage.cs.meta +11 -11
- package/Runtime/Core/Messages/StringMessage.cs.meta +11 -3
- package/Runtime/Core/Messages.meta +8 -8
- package/Runtime/Core/MessagingDebug.cs.meta +11 -11
- package/Runtime/Core/Pooling/CollectionPool.cs +266 -0
- package/Runtime/Core/Pooling/CollectionPool.cs.meta +11 -0
- package/Runtime/Core/Pooling/CollectionPoolDiagnostics.cs +30 -0
- package/Runtime/Core/Pooling/CollectionPoolDiagnostics.cs.meta +11 -0
- package/Runtime/Core/Pooling/DxPools.cs +157 -0
- package/Runtime/Core/Pooling/DxPools.cs.meta +11 -0
- package/Runtime/Core/Pooling/EvictionPlayerLoopHook.cs +106 -0
- package/Runtime/Core/Pooling/EvictionPlayerLoopHook.cs.meta +11 -0
- package/Runtime/Core/Pooling/IDxMessagingClock.cs +18 -0
- package/Runtime/Core/Pooling/IDxMessagingClock.cs.meta +11 -0
- package/Runtime/Core/Pooling/PoolDiagnosticsSnapshot.cs +55 -0
- package/Runtime/Core/Pooling/PoolDiagnosticsSnapshot.cs.meta +11 -0
- package/Runtime/Core/Pooling/StopwatchClock.cs +27 -0
- package/Runtime/Core/Pooling/StopwatchClock.cs.meta +11 -0
- package/Runtime/Core/Pooling/UnityRealtimeClock.cs +31 -0
- package/Runtime/Core/Pooling/UnityRealtimeClock.cs.meta +11 -0
- package/Runtime/Core/Pooling.meta +9 -0
- package/Runtime/Core.meta +8 -8
- package/Runtime/Unity/CurrentGlobalMessageBusProvider.cs.meta +12 -12
- package/Runtime/Unity/DxMessagingRuntimeInitializer.cs.meta +11 -11
- package/Runtime/Unity/InitialGlobalMessageBusProvider.cs.meta +12 -12
- package/Runtime/Unity/Integrations/Reflex/AssemblyInfo.cs.meta +11 -3
- package/Runtime/Unity/Integrations/Reflex/ReflexRegistrationInstaller.cs +73 -0
- package/Runtime/Unity/Integrations/Reflex/ReflexRegistrationInstaller.cs.meta +11 -11
- package/Runtime/Unity/Integrations/Reflex/WallstopStudios.DxMessaging.Reflex.asmdef +20 -20
- package/Runtime/Unity/Integrations/Reflex/WallstopStudios.DxMessaging.Reflex.asmdef.meta +7 -7
- package/Runtime/Unity/Integrations/Reflex.meta +8 -8
- package/Runtime/Unity/Integrations/VContainer/AssemblyInfo.cs.meta +11 -3
- package/Runtime/Unity/Integrations/VContainer/VContainerRegistrationExtensions.cs +109 -1
- package/Runtime/Unity/Integrations/VContainer/VContainerRegistrationExtensions.cs.meta +11 -11
- package/Runtime/Unity/Integrations/VContainer/WallstopStudios.DxMessaging.VContainer.asmdef +30 -30
- package/Runtime/Unity/Integrations/VContainer/WallstopStudios.DxMessaging.VContainer.asmdef.meta +7 -7
- package/Runtime/Unity/Integrations/VContainer.meta +8 -8
- package/Runtime/Unity/Integrations/Zenject/AssemblyInfo.cs.meta +11 -3
- package/Runtime/Unity/Integrations/Zenject/WallstopStudios.DxMessaging.Zenject.asmdef +30 -30
- package/Runtime/Unity/Integrations/Zenject/WallstopStudios.DxMessaging.Zenject.asmdef.meta +7 -7
- package/Runtime/Unity/Integrations/Zenject/ZenjectRegistrationInstaller.cs +79 -1
- package/Runtime/Unity/Integrations/Zenject/ZenjectRegistrationInstaller.cs.meta +11 -11
- package/Runtime/Unity/Integrations/Zenject.meta +8 -8
- package/Runtime/Unity/Integrations.meta +8 -8
- package/Runtime/Unity/MessageAwareComponent.cs +74 -0
- package/Runtime/Unity/MessageAwareComponent.cs.meta +11 -11
- package/Runtime/Unity/MessageBusProviderHandle.cs.meta +12 -12
- package/Runtime/Unity/MessagingComponent.cs +43 -10
- package/Runtime/Unity/MessagingComponent.cs.meta +11 -11
- package/Runtime/Unity/MessagingComponentInstaller.cs.meta +12 -12
- package/Runtime/Unity/ScriptableMessageBusProvider.cs.meta +12 -12
- package/Runtime/Unity.meta +8 -8
- package/Runtime/WallstopStudios.DxMessaging.asmdef +14 -14
- package/Runtime/WallstopStudios.DxMessaging.asmdef.meta +7 -7
- package/Runtime.meta +8 -8
- package/Samples~/DI/Prefabs/MessagingInstallerSample.prefab +98 -98
- package/Samples~/DI/Prefabs/MessagingInstallerSample.prefab.meta +7 -7
- package/Samples~/DI/Prefabs.meta +8 -8
- package/Samples~/DI/Providers/GlobalMessageBusProvider.asset +14 -14
- package/Samples~/DI/Providers/GlobalMessageBusProvider.asset.meta +8 -8
- package/Samples~/DI/Providers/InitialGlobalMessageBusProvider.asset +14 -14
- package/Samples~/DI/Providers/InitialGlobalMessageBusProvider.asset.meta +8 -8
- package/Samples~/DI/Providers.meta +8 -8
- package/Samples~/DI/README.md +51 -51
- package/Samples~/DI/README.md.meta +7 -7
- package/Samples~/DI/Reflex/SampleInstaller.cs +7 -0
- package/Samples~/DI/Reflex/SampleInstaller.cs.meta +11 -11
- package/Samples~/DI/Reflex.meta +8 -8
- package/Samples~/DI/VContainer/SampleLifetimeScope.cs +6 -1
- package/Samples~/DI/VContainer/SampleLifetimeScope.cs.meta +11 -11
- package/Samples~/DI/VContainer.meta +8 -8
- package/Samples~/DI/Zenject/SampleInstaller.cs +8 -0
- package/Samples~/DI/Zenject/SampleInstaller.cs.meta +11 -11
- package/Samples~/DI/Zenject.meta +8 -8
- package/Samples~/DI.meta +8 -8
- package/Samples~/Mini Combat/Boot.cs.meta +11 -11
- package/Samples~/Mini Combat/Enemy.cs.meta +11 -11
- package/Samples~/Mini Combat/Messages.cs.meta +11 -11
- package/Samples~/Mini Combat/Player.cs.meta +11 -11
- package/Samples~/Mini Combat/README.md +324 -323
- package/Samples~/Mini Combat/README.md.meta +7 -7
- package/Samples~/Mini Combat/UIOverlay.cs.meta +11 -11
- package/Samples~/Mini Combat/Walkthrough.md +430 -430
- package/Samples~/Mini Combat/Walkthrough.md.meta +7 -7
- package/Samples~/Mini Combat/WallstopStudios.DxMessaging.MiniCombat.Sample.asmdef +13 -13
- package/Samples~/Mini Combat/WallstopStudios.DxMessaging.MiniCombat.Sample.asmdef.meta +7 -7
- package/Samples~/Mini Combat.meta +8 -8
- package/Samples~/UI Buttons + Inspector/DiagnosticsEnabler.cs.meta +11 -11
- package/Samples~/UI Buttons + Inspector/Messages.cs.meta +11 -11
- package/Samples~/UI Buttons + Inspector/MessagingObserver.cs.meta +11 -11
- package/Samples~/UI Buttons + Inspector/README.md +210 -209
- package/Samples~/UI Buttons + Inspector/README.md.meta +7 -7
- package/Samples~/UI Buttons + Inspector/UIButtonEmitter.cs.meta +11 -11
- package/Samples~/UI Buttons + Inspector/WallstopStudios.DxMessaging.UIButtons.Sample.asmdef +13 -13
- package/Samples~/UI Buttons + Inspector/WallstopStudios.DxMessaging.UIButtons.Sample.asmdef.meta +7 -7
- package/Samples~/UI Buttons + Inspector.meta +8 -8
- package/SourceGenerators/Directory.Build.props +50 -3
- package/SourceGenerators/Directory.Build.props.meta +7 -7
- package/SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators/DxAutoConstructorGenerator.cs +96 -63
- package/SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators/DxAutoConstructorGenerator.cs.meta +11 -11
- package/SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators/DxMessageIdGenerator.cs +745 -87
- package/SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators/DxMessageIdGenerator.cs.meta +11 -3
- package/SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators.csproj +39 -46
- package/SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators.csproj.meta +7 -7
- package/SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators.meta +8 -8
- package/SourceGenerators/global.json +7 -0
- package/SourceGenerators/global.json.meta +7 -0
- package/SourceGenerators.meta +8 -8
- package/Third Party Notices.md +3 -3
- package/Third Party Notices.md.meta +7 -7
- package/package.json +102 -92
- package/package.json.meta +7 -7
package/CHANGELOG.md
CHANGED
|
@@ -1,67 +1,315 @@
|
|
|
1
|
-
# Changelog
|
|
2
|
-
|
|
3
|
-
All notable changes to this project will be documented in this file.
|
|
4
|
-
|
|
5
|
-
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
|
-
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
|
-
|
|
8
|
-
## [Unreleased]
|
|
9
|
-
|
|
10
|
-
## [
|
|
11
|
-
|
|
12
|
-
###
|
|
13
|
-
|
|
14
|
-
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
-
|
|
52
|
-
|
|
53
|
-
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
-
|
|
67
|
-
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project will be documented in this file.
|
|
4
|
+
|
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
|
+
|
|
8
|
+
## [Unreleased]
|
|
9
|
+
|
|
10
|
+
## [3.1.0]
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- Deregistration-speed benchmarks (`DeregistrationFlood_1000Types_Cold` and
|
|
15
|
+
`DeregistrationFlood_1000Types_WarmJit`): the teardown mirror of the existing
|
|
16
|
+
registration floods. Each stages 1000 live registrations untimed, then times
|
|
17
|
+
`MessageRegistrationToken.UnregisterAll()` (the production deregistration path).
|
|
18
|
+
Both are wall-clock (latency) rows alongside the registration floods in the
|
|
19
|
+
rendered dispatch tables (closes the deregistration ask in GitHub issue #31).
|
|
20
|
+
- `MessageAwareComponent.ReregisterOnEnableAfterRelease`: opt-in virtual property
|
|
21
|
+
(default `false`, preserving existing behavior). When overridden to return
|
|
22
|
+
`true`, a component whose registration token was released (for example via
|
|
23
|
+
`MessagingComponent.Release`) re-creates its token and replays
|
|
24
|
+
`RegisterMessageHandlers` the next time it is enabled, instead of staying
|
|
25
|
+
permanently unregistered. The replay runs exactly once per release; plain
|
|
26
|
+
enable/disable cycles without a release never re-stage registrations.
|
|
27
|
+
|
|
28
|
+
### Changed
|
|
29
|
+
|
|
30
|
+
- The Unity object identity backing `InstanceId` (the dispatch key) is now read
|
|
31
|
+
through a single version-gated source, `InstanceId.StableId`. On Unity 6.4+ it
|
|
32
|
+
uses the non-deprecated `EntityId.ToULong(...)` accessor and keeps its low 32
|
|
33
|
+
bits -- exactly the value the legacy `GetInstanceID()` returned (verified across
|
|
34
|
+
`GameObject`, `Component`, and `ScriptableObject`); older Unity keeps
|
|
35
|
+
`GetInstanceID()`. This keeps the package compiling on Unity 6.5+, where
|
|
36
|
+
`GetInstanceID()` becomes a compile error, and removes its deprecation warning on
|
|
37
|
+
Unity 6.4+. The 32-bit dispatch key, equality, and hashing are unchanged. Closes
|
|
38
|
+
GitHub issue #208.
|
|
39
|
+
- `MessagingComponent.ToggleMessageHandler(false)` is no longer silently ignored
|
|
40
|
+
while `emitMessagesWhenDisabled` is true: explicit toggle calls now always win,
|
|
41
|
+
in both directions. Instead, the Unity enable/disable lifecycle itself now skips
|
|
42
|
+
the handler toggle while `emitMessagesWhenDisabled` is true, so disabling the
|
|
43
|
+
component still keeps emission alive (the flag's documented purpose) AND an
|
|
44
|
+
explicit `ToggleMessageHandler(false)` is no longer reverted by a later
|
|
45
|
+
enable/disable cycle. Previously the veto made explicit deactivation requests
|
|
46
|
+
silent no-ops and `OnEnable` force-reactivated the handler. One consequence:
|
|
47
|
+
setting the flag while the handler is lifecycle-deactivated (disabled with the
|
|
48
|
+
flag clear) means a later enable no longer auto-reactivates - call
|
|
49
|
+
`ToggleMessageHandler(true)` to resume.
|
|
50
|
+
|
|
51
|
+
- Removed the internal per-handler dispatch-link machinery (the ten
|
|
52
|
+
`*DispatchLink` wrapper classes, their lazily-populated slot array, and
|
|
53
|
+
the outer-generation guard) plus the vestigial non-global prefreeze
|
|
54
|
+
descriptors that the flattened dispatch had already stopped consuming:
|
|
55
|
+
snapshots for non-global slots no longer build per-handler bucket entry
|
|
56
|
+
arrays at all (they dispatch exclusively through the resolved flat
|
|
57
|
+
delegate arrays and keep count-only buckets for the legacy "found any
|
|
58
|
+
handlers" reporting), which removes one pooled array rent/fill/return
|
|
59
|
+
per priority bucket from every snapshot rebuild. No public API or
|
|
60
|
+
dispatch semantics change (verified emission-for-emission against the
|
|
61
|
+
previous implementation, including global accept-all mid-emission
|
|
62
|
+
mutation ordering, trim-then-re-register staleness, reset-mid-dispatch,
|
|
63
|
+
and zero steady-state allocations).
|
|
64
|
+
- Each emission now consults a cached per-(bus, message-type, kind) dispatch
|
|
65
|
+
plan instead of re-resolving interceptor, global accept-all, and
|
|
66
|
+
post-processor sinks with multiple type-cache lookups per emit. When the
|
|
67
|
+
plan shows none of those features are present (the common case), a fast
|
|
68
|
+
emit lane runs only the handle phase: one plan fetch, one validity check,
|
|
69
|
+
snapshot acquisition, and the flat dispatch loop. Plans are invalidated by
|
|
70
|
+
a single bus-wide version stamp that every registration, deregistration,
|
|
71
|
+
interceptor/global/post mutation, sweep/Trim, `ResetState`, and runtime
|
|
72
|
+
settings reload bumps; mutations performed by handlers mid-emission are
|
|
73
|
+
re-detected at phase boundaries, so frozen-snapshot semantics, mid-emission
|
|
74
|
+
registration gating, interceptor re-targeting, and mid-dispatch reset
|
|
75
|
+
behavior are unchanged (verified emission-for-emission against the previous
|
|
76
|
+
implementation). Diagnostics mode and `MessagingDebug.enabled` are still
|
|
77
|
+
read live on every emission. Out-of-Unity rig measurements (directional):
|
|
78
|
+
one-handler throughput up roughly 1.5-1.7x per kind and four-handler
|
|
79
|
+
fan-out up ~35%, with feature-heavy paths unchanged within noise and zero
|
|
80
|
+
steady-state allocations.
|
|
81
|
+
- The internal flat-dispatch shape assertion (`DebugAssertFlatShape`) moved
|
|
82
|
+
from `DEBUG` builds to the opt-in `DXMESSAGING_INTERNAL_CHECKS` scripting
|
|
83
|
+
define; it cost a type test per dispatch on Editor hot paths.
|
|
84
|
+
- On IL2CPP players, the dispatch hot loops (flat snapshot walks, global
|
|
85
|
+
accept-all bucket walks, and global entry invokers) now opt out of the
|
|
86
|
+
generated per-iteration null and array-bounds checks via a vendored
|
|
87
|
+
internal `Unity.IL2CPP.CompilerServices.Il2CppSetOptionAttribute`. The
|
|
88
|
+
elided checks guard invariants the snapshot builder already guarantees
|
|
89
|
+
(frozen arrays, non-null handler/invoker pairs, `count` never exceeding
|
|
90
|
+
the array length), all pinned by tests; rig/diagnostic builds keep the
|
|
91
|
+
`DXMESSAGING_INTERNAL_CHECKS` shape assertions. No behavior change under
|
|
92
|
+
Mono or in the editor.
|
|
93
|
+
- On IL2CPP players, the per-emit AOT untyped-dispatch bridge registration
|
|
94
|
+
(`EnsureAot*Bridge<T>`, IL2CPP-only) now runs when a message type's dispatch
|
|
95
|
+
plan is first built on a bus (the first typed emit) instead of on every emit,
|
|
96
|
+
removing a generic-static class-initialization check and a non-inlined call
|
|
97
|
+
from the steady-state IL2CPP dispatch prologue. The registration is latched
|
|
98
|
+
process-globally, so it actually executes once per type; the guarded call site
|
|
99
|
+
is simply reached at first plan build rather than on every emit. The bridge is
|
|
100
|
+
rooted before the first untyped dispatch of a type by either any registration
|
|
101
|
+
of that type or its first typed emit, so the untyped-dispatch contract is
|
|
102
|
+
unchanged (a never-touched type still throws the same missing-bridge error).
|
|
103
|
+
No behavior change under Mono or in the editor (the calls compile out there).
|
|
104
|
+
- Dispatch for every message kind (untargeted, targeted, and broadcast;
|
|
105
|
+
handle and post-process phases) now resolves handlers to flat, pooled
|
|
106
|
+
delegate arrays at snapshot-build time instead of walking per-handler
|
|
107
|
+
dictionaries and dispatch links per message. Measured on Editor PlayMode
|
|
108
|
+
Mono x64 versus the previous release: one untargeted handler 17.5M to
|
|
109
|
+
22.1M emits/sec, four untargeted handlers 3.9M to 20.0M, one targeted
|
|
110
|
+
listener 11.4M to 15.7M, sixteen targeted listeners 0.73M to 8.7M, one
|
|
111
|
+
broadcast handler 8.0M to 15.6M, four post-processors 3.3M to 12.6M -
|
|
112
|
+
all with zero steady-state allocations, an 8% faster cold registration
|
|
113
|
+
flood, and unchanged dispatch semantics (snapshot freezing, priority and
|
|
114
|
+
registration order, mid-emission registration visibility). One deliberate
|
|
115
|
+
refinement: a handler that deactivates itself mid-emission now skips its
|
|
116
|
+
own remaining delegates in that emission for every kind (the active check
|
|
117
|
+
runs per delegate instead of once per handler), matching the documented
|
|
118
|
+
immediate-deactivation semantics. Mid-emission registration gating is
|
|
119
|
+
also now uniform: a delegate registered during an emission never fires in
|
|
120
|
+
that emission, for every kind and every registration shape. Previously a
|
|
121
|
+
handler registering a different-shaped delegate for the same type on its
|
|
122
|
+
own MessageHandler could fire it in the same emission, depending on
|
|
123
|
+
unrelated handler counts.
|
|
124
|
+
|
|
125
|
+
### Fixed
|
|
126
|
+
|
|
127
|
+
- Domain-reload advisory warnings are now re-evaluated after deferred Editor
|
|
128
|
+
settings creation/migration, so an initial passive load with no settings asset
|
|
129
|
+
cannot permanently skip an unsuppressed warning for that editor domain.
|
|
130
|
+
- Token cleanup now clears token-local diagnostics and stale teardown state:
|
|
131
|
+
`UnregisterAll()`, `Dispose()`, final-handle removal, released
|
|
132
|
+
`MessagingComponent` tokens, and disposed registration leases no longer
|
|
133
|
+
retain metadata, call counts, emission history, or stale deregistration
|
|
134
|
+
closures that could report old registrations or over-deregister later.
|
|
135
|
+
Failed `Enable()` replays now roll back partial registrations before
|
|
136
|
+
throwing the original failure; failed active `RetargetMessageBus()` replays
|
|
137
|
+
roll back partial new-bus registrations and restore previous-bus
|
|
138
|
+
registrations that are not still live behind a failed rollback cleanup.
|
|
139
|
+
Deregistration actions that throw before cleanup remain retryable instead
|
|
140
|
+
of being forgotten, including through owning registration leases and
|
|
141
|
+
`MessagingComponent.Release()` retries. `ActivateOnBuild` failures now
|
|
142
|
+
clean up the partially built lease before throwing again; if cleanup cannot
|
|
143
|
+
complete, `MessageRegistrationBuildException` exposes the retryable lease
|
|
144
|
+
so callers can dispose it after resolving the cleanup failure.
|
|
145
|
+
- Interceptors registered through a `MessageRegistrationToken` bound to a
|
|
146
|
+
custom bus (`MessageRegistrationToken.Create(handler, customBus)`) now land
|
|
147
|
+
on that bus. `RegisterUntargetedInterceptor`, `RegisterTargetedInterceptor`,
|
|
148
|
+
and `RegisterBroadcastInterceptor` previously dropped the token's bus and
|
|
149
|
+
registered on the handler's default (typically global) bus, so they never
|
|
150
|
+
saw custom-bus emissions and silently intercepted global traffic instead.
|
|
151
|
+
The fix also covers registrations staged while disabled (they activate on
|
|
152
|
+
the token's bus at `Enable()` time) and `RetargetMessageBus`, which now
|
|
153
|
+
re-routes interceptors along with every other registration kind.
|
|
154
|
+
- Registering or deregistering a handler mid-emission and then emitting the
|
|
155
|
+
same message type reentrant-style from inside a handler no longer corrupts
|
|
156
|
+
the in-flight dispatch.
|
|
157
|
+
The nested emission's snapshot rebuild previously released the pooled
|
|
158
|
+
arrays the outer emission was still iterating
|
|
159
|
+
(`NullReferenceException` / `ArgumentOutOfRangeException`, or silent
|
|
160
|
+
cross-dispatch aliasing at deeper nesting). Displaced snapshots are now
|
|
161
|
+
released only after the outermost dispatch exits, each emission keeps its
|
|
162
|
+
own frozen-cache identity across nested emissions, and the broadcast
|
|
163
|
+
priority walk tolerates nested membership churn.
|
|
164
|
+
- A `MessageRegistrationLease` whose `OnActivate` callback throws no longer
|
|
165
|
+
wedges its registrations. The lease previously recorded itself as inactive
|
|
166
|
+
while the registrations stayed live, so `Deactivate()` and `Dispose()`
|
|
167
|
+
silently refused to release them. The lease now marks itself active before
|
|
168
|
+
invoking the callback: the exception still propagates, and standard
|
|
169
|
+
`Deactivate()`/`Dispose()` teardown fully releases the registrations.
|
|
170
|
+
- Calling `DxMessagingStaticState.Reset` (or resetting a bus) from inside a
|
|
171
|
+
message handler no longer crashes the in-flight emission. Targeted and
|
|
172
|
+
broadcast dispatch previously returned the active emission's pooled snapshot
|
|
173
|
+
arrays mid-iteration (`NullReferenceException` /
|
|
174
|
+
`ArgumentOutOfRangeException`); the teardown is now deferred until the
|
|
175
|
+
outermost dispatch exits, mirroring the existing `Trim` deferral, and the
|
|
176
|
+
remaining handlers in that emission short-circuit cleanly.
|
|
177
|
+
- Equal-priority handlers now always dispatch in live registration order. The
|
|
178
|
+
documented "same priority uses registration order" contract previously broke
|
|
179
|
+
after remove/re-register churn (a new handler could dispatch in a removed
|
|
180
|
+
handler's old position), after `Disable()`/`Enable()` cycles (replay order
|
|
181
|
+
permuted), and across components (a newly created component could dispatch
|
|
182
|
+
in a destroyed component's old position). Handler caches, bus-side priority
|
|
183
|
+
buckets, and token replay now preserve insertion order explicitly.
|
|
184
|
+
- Targeted and broadcast post-processors now follow an interceptor-rewritten
|
|
185
|
+
target/source. When an interceptor redirects a message via its
|
|
186
|
+
`ref InstanceId` parameter, post-processors registered for the rewritten id
|
|
187
|
+
run (previously the broadcast path never re-resolved the rewritten source,
|
|
188
|
+
and the targeted path preferred a stale pre-interceptor snapshot, so the
|
|
189
|
+
rewritten id's post-processors were silently skipped).
|
|
190
|
+
- `DiagnosticsTarget` gating now matches its documented semantics. Player
|
|
191
|
+
builds previously enabled diagnostics for the `Editor` flag and ignored the
|
|
192
|
+
`Runtime` flag, and the Editor enabled diagnostics when only `Runtime` was
|
|
193
|
+
set. `Editor` now enables diagnostics only inside the Unity Editor,
|
|
194
|
+
`Runtime` only in player/runtime builds, and `All` in both, exactly as the
|
|
195
|
+
diagnostics guide describes.
|
|
196
|
+
- Analyzer payload builds are now reproducible under the pinned
|
|
197
|
+
`SourceGenerators/global.json` SDK. The shipped analyzer and source-generator
|
|
198
|
+
DLLs no longer embed source revision or PDB metadata, CI double-builds them
|
|
199
|
+
into temporary payload directories before comparing against
|
|
200
|
+
`Editor/Analyzers`, and Unity runner maintenance now verifies or repairs the
|
|
201
|
+
full active editor matrix outside ordinary test jobs.
|
|
202
|
+
- IL2CPP builds now root untyped dispatch bridges for concrete
|
|
203
|
+
source-visible message types without changing the public API. The source
|
|
204
|
+
generator emits IL2CPP-only AOT bridge registration for attributed messages
|
|
205
|
+
and manual `IUntargetedMessage` / `ITargetedMessage` /
|
|
206
|
+
`IBroadcastMessage` implementations, while open generic definitions are
|
|
207
|
+
skipped until a closed generic type is used through the typed registration
|
|
208
|
+
path. Untyped dispatch also keeps separate per-kind delegate caches, so a
|
|
209
|
+
message type that participates in more than one dispatch kind can no longer
|
|
210
|
+
reuse the wrong cached delegate shape.
|
|
211
|
+
- Unity projects no longer keep stale DxMessaging analyzer entries in `csc.rsp`; the setup script removes package-cache analyzer registrations so Unity loads the shipped analyzer and source generator once through the `RoslynAnalyzer`-labeled plugin copy. The base-call ignore sidecar's `-additionalfile:` entry is also re-synchronized after deferred sidecar regeneration, so first-load `OnValidate` writes and Inspector ignore-list edits repair missing `csc.rsp` wiring during the same editor session.
|
|
212
|
+
- Provider-backed emit helpers now route sourced, targeted, and untargeted messages through the resolved `IMessageBus`, so custom bus and DI-provider callers no longer fall back to the global bus for interface-shaped message dispatch.
|
|
213
|
+
- Standalone and IL2CPP player builds now compile. The dispatch hot path performs reinterpret casts that previously used `System.Runtime.CompilerServices.Unsafe`; the Unity Editor supplies that type, but player builds under the .NET Standard 2.0 profile do not, so editmode and playmode passed while standalone IL2CPP failed to build with `CS0103: The name 'Unsafe' does not exist in the current context`. Those calls now route through Unity's built-in `UnsafeUtility` (in `UnityEngine.CoreModule`), which resolves identically in the Editor and every player scripting backend. The change preserves the existing zero-allocation dispatch behavior and adds no package dependency or shipped assembly.
|
|
214
|
+
- Shipped source generators now compile against Unity 2021-compatible Roslyn 3.8 APIs and use the classic `ISourceGenerator` entry point, preventing Unity 2021.3 analyzer-host load failures (`CS8032`) while preserving the generated message-id and auto-constructor output for newer Unity editors.
|
|
215
|
+
- `MessageRegistrationToken.RemoveRegistration(handle)` now compiles cleanly on Unity 2021 while preserving the existing behavior of removing the active deregistration, staged registration, metadata, and diagnostic call-count entries.
|
|
216
|
+
- Unity 2021.3 no longer aborts compilation with _Multiple precompiled assemblies with the same name_ (`PrecompiledAssemblyException`). The shipped Roslyn analyzer and source-generator DLLs are now excluded from every build platform (the Editor included) and activated solely by the `RoslynAnalyzer` asset label, so Unity treats them as compiler analyzers rather than managed precompiled assemblies that collide with the copy placed in the consuming project's `Assets/`. Generated message-id and auto-constructor output is unchanged.
|
|
217
|
+
- The dependency-injection sample README (`Samples~/DI`) now links to the real `Runtime/Unity/Integrations/VContainer/VContainerRegistrationExtensions.cs`; the previous link dropped the `VContainer/` folder and resolved to a missing file.
|
|
218
|
+
|
|
219
|
+
## [3.0.1]
|
|
220
|
+
|
|
221
|
+
### Added
|
|
222
|
+
|
|
223
|
+
- New Roslyn base-call analyzer (`MessageAwareComponentBaseCallAnalyzer`) that flags `MessageAwareComponent` subclasses whose lifecycle overrides forget to invoke `base.Awake()`, `base.OnEnable()`, `base.OnDisable()`, `base.OnDestroy()`, or `base.RegisterMessageHandlers()`. Introduces diagnostics `DXMSG006` (missing base call), `DXMSG007` (lifecycle method hidden with `new`), `DXMSG008` (opt-out marker), `DXMSG009` (method implicitly hides a lifecycle method without `override`/`new`), and `DXMSG010` (`base.{method}()` chains into an override that does not reach `MessageAwareComponent`). DXMSG006's diagnostic message is now per-method: each guarded method emits a sentence describing the runtime consequence (registration token never created, handlers not re-enabled, memory leak, etc.) so users immediately see what breaks. The inspector overlay HelpBox renders the same per-method sentences. Severity is tunable per project via `.editorconfig` (e.g. `dotnet_diagnostic.DXMSG006.severity = error`). Ships as a separate `WallstopStudios.DxMessaging.Analyzer.dll` deployed alongside the existing source-generator DLL by `SetupCscRsp` so it loads under both Unity 2021's Roslyn 3.8 analyzer host and newer Unity versions. Diagnostic help links now open the current analyzer reference page in the DxMessaging repository.
|
|
224
|
+
- Runtime self-check breadcrumb on `MessageAwareComponent`: `OnEnable` now logs a one-time `Debug.LogError` per instance when the registration token is null, with a link to the DXMSG006 reference. Gated on `UNITY_EDITOR || DEBUG`, so release builds pay no cost. Catches the case where the analyzer DLL was disabled or did not run, surfacing the silent failure as a loud editor error instead.
|
|
225
|
+
- New public `[DxIgnoreMissingBaseCall]` attribute (`DxMessaging.Core.Attributes`) for source-level opt-out of the base-call analyzer. Applied to a class, every guarded lifecycle method on that class is exempt; applied to a single method, only that method is exempt. The analyzer still emits an Info-level `DXMSG008` at the suppression site so opt-outs remain auditable, and the inspector overlay's snapshot honours the same scoping (method-level suppresses only the annotated method, type-level opts out the entire type). Not inherited -- derived classes must opt out explicitly.
|
|
226
|
+
- New inspector overlay (`MessageAwareComponentInspectorOverlay`) for every `MessageAwareComponent` subclass: missing-base-call warnings reported by the analyzer or harvested from the Unity console are surfaced as a HelpBox in the inspector header without clobbering user-defined `[CustomEditor]`s (the overlay hooks `Editor.finishedDefaultHeaderGUI`). The overlay restores the previous session's report immediately on Unity Editor startup (loaded from `Library/DxMessaging/baseCallReport.json`) instead of waiting for the first post-reload scan to complete; the HelpBox is annotated `(cached from previous session -- refreshing...)` until the first scan refreshes it. A companion fallback editor (`MessageAwareComponentFallbackEditor`) hosts the overlay for subclasses with no other custom editor and renders the body via `DrawDefaultInspector()` so subclasses with no serialized fields no longer leave an empty vertical gap below the inspector header.
|
|
227
|
+
- New DxMessaging project-wide settings asset (`DxMessagingSettings`, stored at `Assets/Editor/DxMessagingSettings.asset`) accessible from Unity's Project Settings. Controls diagnostics targets applied to `IMessageBus.GlobalDiagnosticsTargets`, the editor message buffer size, the domain-reload warning suppression, the base-call analyzer toggle, the project-wide base-call ignore list, and the optional Unity console bridge that feeds the inspector overlay.
|
|
228
|
+
- New `docs/reference/analyzers.md` reference page documenting every `DXMSG###` diagnostic the package emits, with severity, source generator/analyzer, trigger conditions, message text, and code samples for each. Added to the Reference section of the documentation site navigation.
|
|
229
|
+
- Added `llms.txt` plus README onboarding guidance so users can connect AI assistants with accurate DxMessaging package context.
|
|
230
|
+
- Test-suite hardening: parameterized scenario fixture (`MessageScenario`, `MessageScenarios`, `ScenarioHarness`, `AllocationAssertions`) under `Tests/Runtime/TestUtilities/` enabling kind-parameterized tests.
|
|
231
|
+
- Behavioural gap closures: `HandlerExceptionTests`, `ReentrantEmissionTests`, `NullAndInvalidInputTests`, `SingleThreadContractTests` pinning exception-in-handler, re-entrancy, null-input, and threading contracts.
|
|
232
|
+
- `AllocationMatrixTests` covering zero-GC dispatch across kinds, interceptors, post-processors, diagnostics, and priority-based dispatch.
|
|
233
|
+
- Expanded coverage now pins source-generator and analyzer behaviour that users rely on: generic / record struct / nested partial / nullable annotation cases for `DxMessageIdGenerator`; `[DxOptionalParameter]` permutations and DXMSG005 boundary cases for `DxAutoConstructorGenerator`; positive opt-out cases for `DxIgnoreMissingBaseCallAttribute`. No runtime API change.
|
|
234
|
+
- Three new public read-only registration counters on `IMessageBus`: `RegisteredInterceptors`, `RegisteredPostProcessors`, and `RegisteredGlobalAcceptAll`. Lets diagnostic and leak-check tooling distinguish interceptor / post-processor / global accept-all leaks from regular handler leaks, and lets external monitors aggregate the bus's registration footprint without reflecting on internals. `MessageBus` aggregates the counters on each read by walking the per-message-type caches; consumers polling these properties in tight loops should snapshot at region boundaries.
|
|
235
|
+
- Runtime memory-reclamation foundations: `DxMessagingRuntimeSettings` loads from `Resources/DxMessagingRuntimeSettings` and hot-reloads eviction cadence, enablement, trim opt-out, and pool-cap changes without recreating the bus. Pooled internal collections and typed/bus slot registries preserve existing dispatch APIs while making empty handler and interceptor slots reclaimable. `IMessageBus.Trim(force)` and `MessageHandler.TrimAll(force)` reset dirty empty slots and trim shared pools on demand, `OccupiedTypeSlots` / `OccupiedTargetSlots` expose the retained bus and dirty typed-handler slot footprint for diagnostics, and idle sweeps run from emits and Unity's PlayerLoop. New user-facing reference and tuning docs ship at `docs/reference/runtime-settings.md` (per-setting reference table) and `docs/guides/memory-reclamation.md` (forced trim, idle sweep, and pool tuning narrative).
|
|
236
|
+
- New explicit-factory registration helpers across all three DI integrations: `VContainerRegistrationExtensions.RegisterDxMessagingBus`, `ReflexRegistrationExtensions.AddDxMessagingBus`, and `ZenjectRegistrationExtensions.BindDxMessagingBus`. Each helper exposes the bus under both the concrete `MessageBus` contract and the `IMessageBus` interface, accepts an overloadable lifetime where the container supports it, accepts a user-supplied `Func<TResolver, MessageBus>` factory, and accepts an `IDxMessagingClock` overload that constructs the bus through the new internal-only `MessageBus.CreateForInternalUse` factory so test-side clocks (for example `FakeClock`) can be injected through the container. The VContainer helper registers both contracts in one registration call, avoiding VContainer environments where chained `.AsSelf().As<IMessageBus>()` drops the concrete contract and fails with `No such registration of type: DxMessaging.Core.MessageBus.MessageBus`; the DI samples either call the helper directly or document the corresponding helper preference for their container shape.
|
|
237
|
+
|
|
238
|
+
### Changed
|
|
239
|
+
|
|
240
|
+
- Mutation tests now exercise every messaging kind (Untargeted/Targeted/Broadcast) via a single parameterized fixture (`[ValueSource(MessageScenarios.AllKinds)]`) across `MutationDuringEmissionTests`, `MutationInterceptorTests`, and `MutationDestructionTests`. Users get tighter cross-kind parity guarantees; no runtime API change. (~720 lines of duplication removed; test count preserved.)
|
|
241
|
+
- Renamed `UntargetedTests`, `TargetedTests`, `BroadcastTests` to `EmitUntargetedSpecificTests`, `EmitTargetedSpecificTests`, `EmitBroadcastSpecificTests` to clarify that kind-common tests live in `EmitTests` and kind-specific tests live in the renamed files. (Test-suite hardening is test-only; no `Runtime/` behavior was modified.)
|
|
242
|
+
- Documentation now warns up front that `MessageAwareComponent` subclasses must call `base.Awake()`, `base.OnEnable()`, `base.OnDisable()`, `base.OnDestroy()`, and `base.RegisterMessageHandlers()` from any override; admonitions added to the Quick Start, Getting Started Guide, Visual Guide, README, FAQ, and Troubleshooting pages all link to [`DXMSG006`](docs/reference/analyzers.md#dxmsg006-missing-base-call) (issue #195).
|
|
243
|
+
|
|
244
|
+
### Fixed
|
|
245
|
+
|
|
246
|
+
- Cross-priority deregistration during in-flight emit no longer drops handlers from the current dispatch.
|
|
247
|
+
- Previously, when a handler at one priority removed a handler at a later priority of the same emission, the later priority's typed-handler stack was rebuilt from the now-mutated registry on first touch and the scheduled-for-removal handler was silently skipped, breaking the documented "frozen handler list per emission" contract.
|
|
248
|
+
- This affected sourced-broadcast, broadcast-without-source, and targeted-without-targeting dispatch (the targeted/untargeted paths already pre-froze every bucket up-front).
|
|
249
|
+
- The bus now pre-freezes every priority bucket's typed-handler caches up-front for every dispatch surface (sourced-broadcast, broadcast-without-source, targeted-without-targeting) and uses the per-emission snapshot count for the dispatch-loop early-out.
|
|
250
|
+
- The sourced-broadcast and broadcast-without-source dispatch loops also no longer short-circuit on the live `cache.handlers.Count == 0` when the per-emission snapshot still holds the deregistered handler.
|
|
251
|
+
- Post-processor prefreeze no longer takes a single-bucket/single-entry fast-path that skipped pre-freezing per-MessageHandler post-processor caches; a regular handler that registers a new post-processor on the same MessageHandler+priority during its own callback now sees the new post-processor on the next emission, not the in-flight one.
|
|
252
|
+
- The same fix extends to cross-`MessageHandler` post-processor dispatch: the inner per-handler `RunFastHandlers` overload used by `TargetedWithoutTargeting`/`BroadcastWithoutSource` post-processors now consults the per-emission snapshot list directly instead of bailing on the live `cache.entries` count, so a sibling `MessageHandler` removing a not-yet-dispatched post-processor no longer silently skips the snapshot-pinned invocation.
|
|
253
|
+
- `RegisterGlobalAcceptAll` (`HandleGlobalUntargeted`/`HandleGlobalTargeted`/`HandleGlobalBroadcast`) is intentionally NOT covered by this fix. The bus's global accept-all dispatch path prefreezes lazily per-entry inside the dispatch loop, so a sibling `MessageHandler` that removes another's global registration mid-emit causes the removed handler to be skipped on the in-flight emission. The behavior is pinned by `MutationPostProcessorAcrossHandlersTests.RemoveOtherGlobalAcceptAllAcrossHandlersDuringDispatch`; if a future change introduces upfront global-handler prefreeze, that test must be updated to expect the snapshot semantics that the per-kind paths already provide.
|
|
254
|
+
- `DxMessagingStaticState.Reset` is now race-safe against deferred deregistrations. Previously, when a message-aware component was destroyed but its disable callback had not yet run (Unity defers Object.Destroy to end of frame) and Reset ran in between, the deferred token teardown would log spurious "Received over-deregistration of {type} for {handler}" errors against the user's Unity console. The bus now stamps each captured deregister closure with a generation counter and silently no-ops closures captured before a Reset. Applied uniformly across every register entry point (untargeted, targeted, broadcast, GlobalAcceptAll, and all three interceptor kinds). The same race-safety guarantee is now propagated to user-installed custom global buses via `MessageBus.BumpResetGeneration()`, which `DxMessagingStaticState.Reset` invokes on the active global bus when it differs from the built-in default; the custom bus's sinks are intentionally left intact to avoid clobbering state the user installed it to preserve. User code is unaffected except that previously-spurious error logs disappear.
|
|
255
|
+
- `MessageRegistrationToken.RemoveRegistration(handle)` no longer leaks the staged registration entry, so a `Disable()`/`Enable()` cycle after `RemoveRegistration` no longer silently re-registers the removed handler. The fix also drops the matching metadata and call-count entries so diagnostic mode does not accumulate stale handles.
|
|
256
|
+
- Resolved [issue #204](https://github.com/Ambiguous-Interactive/DxMessaging/issues/204) (build artifacts and orphaned `.meta` files leaking into the npm tarball) and prevented its regression: `scripts/validate-npm-meta.js` validates real `npm pack --json --dry-run --ignore-scripts` output (and release tarballs via `--tarball`) by rejecting `bin/`, `obj/`, `*.pdb`, `*.tmp`, `*.csproj.user`, `.vs/`, `.idea/`, `*.suo`, `*.user`, and `*.DotSettings.user` paths, while enforcing `.meta` pairing for shipped Unity files and directories. The guard now runs in `validate:all`, pre-push hooks, and the release workflow.
|
|
257
|
+
|
|
258
|
+
## [2.2.0]
|
|
259
|
+
|
|
260
|
+
### Fixed
|
|
261
|
+
|
|
262
|
+
- Fixed a bug where no messages would get received by any listeners due to specifics in Unity play mode timings
|
|
263
|
+
|
|
264
|
+
## [2.1.8]
|
|
265
|
+
|
|
266
|
+
### Fixed
|
|
267
|
+
|
|
268
|
+
- Added npmignore for proper npm publishing (incorrectly packaging some items)
|
|
269
|
+
|
|
270
|
+
## [2.1.7]
|
|
271
|
+
|
|
272
|
+
### Changed
|
|
273
|
+
|
|
274
|
+
- Improved README with prominent Mental Model section
|
|
275
|
+
- Added Mermaid diagrams and decision flowchart for choosing message types
|
|
276
|
+
- Added Common Mistakes callout with troubleshooting link
|
|
277
|
+
- Updated performance comparison table with accurate benchmark range (10-17M ops/sec)
|
|
278
|
+
|
|
279
|
+
### Fixed
|
|
280
|
+
|
|
281
|
+
- Regenerated corrupted meta files in `scripts/wiki`
|
|
282
|
+
|
|
283
|
+
## [2.1.6]
|
|
284
|
+
|
|
285
|
+
### Added
|
|
286
|
+
|
|
287
|
+
- Concepts index page and Mental Model documentation for understanding DxMessaging's design principles
|
|
288
|
+
|
|
289
|
+
### Fixed
|
|
290
|
+
|
|
291
|
+
- Orphaned documentation pages in Concepts section now included in mkdocs.yml navigation
|
|
292
|
+
- Burst compiler assembly resolution errors when using DxMessaging as a package on disk and building for player platforms. Benchmarks and integration test assembly definitions now specify Editor-only platform to prevent Burst from attempting to resolve these assemblies during player builds.
|
|
293
|
+
|
|
294
|
+
## [2.1.5]
|
|
295
|
+
|
|
296
|
+
### Added
|
|
297
|
+
|
|
298
|
+
- GitHub Pages documentation deployment with MkDocs Material theme
|
|
299
|
+
- Wiki synchronization workflow that automatically syncs documentation to GitHub Wiki
|
|
300
|
+
- Documentation validation workflow that runs on pull requests and pushes
|
|
301
|
+
- MkDocs build validation in pre-push hooks
|
|
302
|
+
- Searchable documentation site at <https://ambiguous-interactive.github.io/DxMessaging/>
|
|
303
|
+
- Theme-aware Mermaid diagrams with automatic light/dark mode switching for GitHub Pages
|
|
304
|
+
- User-visible error messages when Mermaid diagrams fail to render
|
|
305
|
+
|
|
306
|
+
### Changed
|
|
307
|
+
|
|
308
|
+
- Updated `documentationUrl` in package.json to point to GitHub Pages site
|
|
309
|
+
- Enhanced README.md with links to documentation site, wiki, and changelog
|
|
310
|
+
- Mermaid diagrams now use neutral theme fallback for GitHub/VSCode markdown preview compatibility
|
|
311
|
+
|
|
312
|
+
### Fixed
|
|
313
|
+
|
|
314
|
+
- Comprehensive syntax highlighting for C# code blocks in documentation with distinct colors for keywords, types, functions, strings, numbers, comments, namespaces, and attributes
|
|
315
|
+
- WCAG AA accessibility compliance for code syntax highlighting in both light and dark themes
|
package/CHANGELOG.md.meta
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
fileFormatVersion: 2
|
|
2
|
-
guid: 341323775e849a648922d928083dda86
|
|
3
|
-
TextScriptImporter:
|
|
4
|
-
externalObjects: {}
|
|
5
|
-
userData:
|
|
6
|
-
assetBundleName:
|
|
7
|
-
assetBundleVariant:
|
|
1
|
+
fileFormatVersion: 2
|
|
2
|
+
guid: 341323775e849a648922d928083dda86
|
|
3
|
+
TextScriptImporter:
|
|
4
|
+
externalObjects: {}
|
|
5
|
+
userData:
|
|
6
|
+
assetBundleName:
|
|
7
|
+
assetBundleVariant:
|