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.
Files changed (270) hide show
  1. package/CHANGELOG.md +315 -67
  2. package/CHANGELOG.md.meta +7 -7
  3. package/Editor/Analyzers/BaseCallIlInspector.cs +277 -0
  4. package/Editor/Analyzers/BaseCallIlInspector.cs.meta +11 -0
  5. package/Editor/Analyzers/BaseCallLogMessageParser.cs +295 -0
  6. package/Editor/Analyzers/BaseCallLogMessageParser.cs.meta +11 -0
  7. package/Editor/Analyzers/BaseCallReportAggregator.cs +308 -0
  8. package/Editor/Analyzers/BaseCallReportAggregator.cs.meta +11 -0
  9. package/Editor/Analyzers/BaseCallTypeScanner.cs +110 -0
  10. package/Editor/Analyzers/BaseCallTypeScanner.cs.meta +11 -0
  11. package/Editor/Analyzers/BaseCallTypeScannerCore.cs +562 -0
  12. package/Editor/Analyzers/BaseCallTypeScannerCore.cs.meta +11 -0
  13. package/Editor/Analyzers/DxMessagingConsoleHarvester.cs +1129 -0
  14. package/Editor/Analyzers/DxMessagingConsoleHarvester.cs.meta +11 -0
  15. package/Editor/Analyzers/Microsoft.CodeAnalysis.CSharp.dll.meta +44 -44
  16. package/Editor/Analyzers/Microsoft.CodeAnalysis.dll.meta +44 -44
  17. package/Editor/Analyzers/System.Collections.Immutable.dll.meta +44 -44
  18. package/Editor/Analyzers/System.Reflection.Metadata.dll.meta +44 -44
  19. package/Editor/Analyzers/System.Runtime.CompilerServices.Unsafe.dll.meta +44 -44
  20. package/Editor/Analyzers/WallstopStudios.DxMessaging.Analyzer.dll +0 -0
  21. package/Editor/Analyzers/WallstopStudios.DxMessaging.Analyzer.dll.meta +46 -0
  22. package/Editor/Analyzers/WallstopStudios.DxMessaging.SourceGenerators.dll +0 -0
  23. package/Editor/Analyzers/WallstopStudios.DxMessaging.SourceGenerators.dll.meta +72 -72
  24. package/Editor/Analyzers.meta +8 -8
  25. package/Editor/AssemblyInfo.cs.meta +11 -3
  26. package/Editor/CustomEditors/MessageAwareComponentFallbackEditor.cs +81 -0
  27. package/Editor/CustomEditors/MessageAwareComponentFallbackEditor.cs.meta +11 -0
  28. package/Editor/CustomEditors/MessageAwareComponentInspectorOverlay.cs +429 -0
  29. package/Editor/CustomEditors/MessageAwareComponentInspectorOverlay.cs.meta +11 -0
  30. package/Editor/CustomEditors/MessagingComponentEditor.cs +1 -1
  31. package/Editor/CustomEditors/MessagingComponentEditor.cs.meta +11 -3
  32. package/Editor/CustomEditors.meta +2 -2
  33. package/Editor/DxMessagingEditorIdle.cs +62 -0
  34. package/Editor/DxMessagingEditorIdle.cs.meta +11 -0
  35. package/Editor/DxMessagingEditorInitializer.cs +112 -15
  36. package/Editor/DxMessagingEditorInitializer.cs.meta +11 -3
  37. package/Editor/DxMessagingEditorLog.cs +32 -0
  38. package/Editor/DxMessagingEditorLog.cs.meta +11 -0
  39. package/Editor/DxMessagingMenu.cs.meta +11 -11
  40. package/Editor/DxMessagingSceneBuildProcessor.cs.meta +11 -11
  41. package/Editor/Settings/DxMessagingBaseCallIgnoreSync.cs +313 -0
  42. package/Editor/Settings/DxMessagingBaseCallIgnoreSync.cs.meta +11 -0
  43. package/Editor/Settings/DxMessagingSettings.cs +261 -11
  44. package/Editor/Settings/DxMessagingSettings.cs.meta +11 -3
  45. package/Editor/Settings/DxMessagingSettingsProvider.cs +50 -33
  46. package/Editor/Settings/DxMessagingSettingsProvider.cs.meta +11 -3
  47. package/Editor/Settings.meta +2 -2
  48. package/Editor/SetupCscRsp.cs +406 -39
  49. package/Editor/SetupCscRsp.cs.meta +11 -3
  50. package/Editor/Testing/MessagingComponentEditorHarness.cs +2 -2
  51. package/Editor/Testing/MessagingComponentEditorHarness.cs.meta +11 -3
  52. package/Editor/Testing.meta +3 -3
  53. package/Editor/WallstopStudios.DxMessaging.Editor.asmdef +14 -14
  54. package/Editor/WallstopStudios.DxMessaging.Editor.asmdef.meta +7 -7
  55. package/Editor.meta +8 -8
  56. package/LICENSE.md +9 -9
  57. package/LICENSE.md.meta +7 -7
  58. package/README.md +940 -900
  59. package/README.md.meta +7 -7
  60. package/Runtime/AssemblyInfo.cs +4 -0
  61. package/Runtime/AssemblyInfo.cs.meta +11 -3
  62. package/Runtime/Core/Attributes/DxAutoConstructorAttribute.cs.meta +11 -3
  63. package/Runtime/Core/Attributes/DxBroadcastMessageAttribute.cs.meta +11 -3
  64. package/Runtime/Core/Attributes/DxIgnoreMissingBaseCallAttribute.cs +26 -0
  65. package/Runtime/Core/Attributes/DxIgnoreMissingBaseCallAttribute.cs.meta +11 -0
  66. package/Runtime/Core/Attributes/DxOptionalParameterAttribute.cs +2 -4
  67. package/Runtime/Core/Attributes/DxOptionalParameterAttribute.cs.meta +11 -3
  68. package/Runtime/Core/Attributes/DxTargetedMessageAttribute.cs.meta +11 -3
  69. package/Runtime/Core/Attributes/DxUntargetedMessageAttribute.cs.meta +11 -3
  70. package/Runtime/Core/Attributes/Il2CppSetOptionAttribute.cs +56 -0
  71. package/Runtime/Core/Attributes/Il2CppSetOptionAttribute.cs.meta +11 -0
  72. package/Runtime/Core/Attributes.meta +2 -2
  73. package/Runtime/Core/Configuration/DxMessagingRuntimeSettings.cs +195 -0
  74. package/Runtime/Core/Configuration/DxMessagingRuntimeSettings.cs.meta +11 -0
  75. package/Runtime/Core/Configuration/DxMessagingRuntimeSettingsProvider.cs +179 -0
  76. package/Runtime/Core/Configuration/DxMessagingRuntimeSettingsProvider.cs.meta +11 -0
  77. package/Runtime/Core/Configuration.meta +9 -0
  78. package/Runtime/Core/DataStructure/CyclicBuffer.cs +46 -28
  79. package/Runtime/Core/DataStructure/CyclicBuffer.cs.meta +11 -3
  80. package/Runtime/Core/DataStructure.meta +2 -2
  81. package/Runtime/Core/Diagnostics/MessageEmissionData.cs.meta +11 -3
  82. package/Runtime/Core/Diagnostics/MessageRegistrationData.cs.meta +11 -3
  83. package/Runtime/Core/Diagnostics/MessageRegistrationType.cs.meta +11 -3
  84. package/Runtime/Core/Diagnostics.meta +2 -2
  85. package/Runtime/Core/DxMessagingStaticState.cs +19 -0
  86. package/Runtime/Core/DxMessagingStaticState.cs.meta +11 -11
  87. package/Runtime/Core/Extensions/EnumExtensions.cs +6 -5
  88. package/Runtime/Core/Extensions/EnumExtensions.cs.meta +11 -3
  89. package/Runtime/Core/Extensions/IListExtensions.cs.meta +11 -3
  90. package/Runtime/Core/Extensions/MessageBusExtensions.cs.meta +12 -12
  91. package/Runtime/Core/Extensions/MessageExtensions.cs +0 -60
  92. package/Runtime/Core/Extensions/MessageExtensions.cs.meta +11 -11
  93. package/Runtime/Core/Extensions.meta +8 -8
  94. package/Runtime/Core/Helper/MessageCache.cs +32 -0
  95. package/Runtime/Core/Helper/MessageCache.cs.meta +11 -3
  96. package/Runtime/Core/Helper/MessageHelperIndexer.cs.meta +11 -3
  97. package/Runtime/Core/Helper.meta +2 -2
  98. package/Runtime/Core/IMessage.cs +3 -3
  99. package/Runtime/Core/IMessage.cs.meta +11 -11
  100. package/Runtime/Core/InstanceId.cs +25 -1
  101. package/Runtime/Core/InstanceId.cs.meta +11 -11
  102. package/Runtime/Core/Internal/DxUnsafe.cs +60 -0
  103. package/Runtime/Core/Internal/DxUnsafe.cs.meta +11 -0
  104. package/Runtime/Core/Internal/FlatDispatch.cs +198 -0
  105. package/Runtime/Core/Internal/FlatDispatch.cs.meta +11 -0
  106. package/Runtime/Core/Internal/TypedGlobalSlotIndex.cs +38 -0
  107. package/Runtime/Core/Internal/TypedGlobalSlotIndex.cs.meta +11 -0
  108. package/Runtime/Core/Internal/TypedSlotIndex.cs +81 -0
  109. package/Runtime/Core/Internal/TypedSlotIndex.cs.meta +11 -0
  110. package/Runtime/Core/Internal/TypedSlots.cs +597 -0
  111. package/Runtime/Core/Internal/TypedSlots.cs.meta +11 -0
  112. package/Runtime/Core/Internal.meta +9 -0
  113. package/Runtime/Core/MessageBus/DiagnosticsTarget.cs.meta +11 -11
  114. package/Runtime/Core/MessageBus/GlobalMessageBusProvider.cs.meta +11 -11
  115. package/Runtime/Core/MessageBus/IMessageBus.cs +189 -15
  116. package/Runtime/Core/MessageBus/IMessageBus.cs.meta +11 -11
  117. package/Runtime/Core/MessageBus/IMessageBusProvider.cs.meta +11 -11
  118. package/Runtime/Core/MessageBus/IMessageRegistrationBuilder.cs +1 -0
  119. package/Runtime/Core/MessageBus/IMessageRegistrationBuilder.cs.meta +11 -11
  120. package/Runtime/Core/MessageBus/Internal/BusContextIndex.cs +16 -0
  121. package/Runtime/Core/MessageBus/Internal/BusContextIndex.cs.meta +11 -0
  122. package/Runtime/Core/MessageBus/Internal/BusSinkIndex.cs +40 -0
  123. package/Runtime/Core/MessageBus/Internal/BusSinkIndex.cs.meta +11 -0
  124. package/Runtime/Core/MessageBus/Internal/BusSlots.cs +719 -0
  125. package/Runtime/Core/MessageBus/Internal/BusSlots.cs.meta +11 -0
  126. package/Runtime/Core/MessageBus/Internal/DispatchKind.cs +38 -0
  127. package/Runtime/Core/MessageBus/Internal/DispatchKind.cs.meta +11 -0
  128. package/Runtime/Core/MessageBus/Internal/DispatchPhase.cs +20 -0
  129. package/Runtime/Core/MessageBus/Internal/DispatchPhase.cs.meta +11 -0
  130. package/Runtime/Core/MessageBus/Internal/DispatchVariant.cs +28 -0
  131. package/Runtime/Core/MessageBus/Internal/DispatchVariant.cs.meta +11 -0
  132. package/Runtime/Core/MessageBus/Internal/IEvictableSlot.cs +48 -0
  133. package/Runtime/Core/MessageBus/Internal/IEvictableSlot.cs.meta +11 -0
  134. package/Runtime/Core/MessageBus/Internal/ISweepable.cs +15 -0
  135. package/Runtime/Core/MessageBus/Internal/ISweepable.cs.meta +11 -0
  136. package/Runtime/Core/MessageBus/Internal/RegistrationMethodAxes.cs +222 -0
  137. package/Runtime/Core/MessageBus/Internal/RegistrationMethodAxes.cs.meta +11 -0
  138. package/Runtime/Core/MessageBus/Internal/SlotKey.cs +192 -0
  139. package/Runtime/Core/MessageBus/Internal/SlotKey.cs.meta +11 -0
  140. package/Runtime/Core/MessageBus/Internal.meta +9 -0
  141. package/Runtime/Core/MessageBus/MessageBus.cs +5366 -3838
  142. package/Runtime/Core/MessageBus/MessageBus.cs.meta +11 -11
  143. package/Runtime/Core/MessageBus/MessageBusRebindMode.cs.meta +11 -11
  144. package/Runtime/Core/MessageBus/MessageRegistrationBuilder.cs +187 -14
  145. package/Runtime/Core/MessageBus/MessageRegistrationBuilder.cs.meta +11 -11
  146. package/Runtime/Core/MessageBus/MessagingRegistration.cs.meta +11 -11
  147. package/Runtime/Core/MessageBus/RegistrationLog.cs.meta +11 -11
  148. package/Runtime/Core/MessageBus.meta +8 -8
  149. package/Runtime/Core/MessageHandler.cs +2399 -1042
  150. package/Runtime/Core/MessageHandler.cs.meta +11 -11
  151. package/Runtime/Core/MessageRegistrationHandle.cs.meta +11 -11
  152. package/Runtime/Core/MessageRegistrationToken.cs +429 -44
  153. package/Runtime/Core/MessageRegistrationToken.cs.meta +11 -11
  154. package/Runtime/Core/Messages/GlobalStringMessage.cs.meta +11 -3
  155. package/Runtime/Core/Messages/IBroadcastMessage.cs.meta +11 -11
  156. package/Runtime/Core/Messages/ITargetedMessage.cs.meta +11 -11
  157. package/Runtime/Core/Messages/IUntargetedMessage.cs.meta +11 -11
  158. package/Runtime/Core/Messages/ReflexiveMessage.cs.meta +11 -3
  159. package/Runtime/Core/Messages/SourcedStringMessage.cs.meta +11 -11
  160. package/Runtime/Core/Messages/StringMessage.cs.meta +11 -3
  161. package/Runtime/Core/Messages.meta +8 -8
  162. package/Runtime/Core/MessagingDebug.cs.meta +11 -11
  163. package/Runtime/Core/Pooling/CollectionPool.cs +266 -0
  164. package/Runtime/Core/Pooling/CollectionPool.cs.meta +11 -0
  165. package/Runtime/Core/Pooling/CollectionPoolDiagnostics.cs +30 -0
  166. package/Runtime/Core/Pooling/CollectionPoolDiagnostics.cs.meta +11 -0
  167. package/Runtime/Core/Pooling/DxPools.cs +157 -0
  168. package/Runtime/Core/Pooling/DxPools.cs.meta +11 -0
  169. package/Runtime/Core/Pooling/EvictionPlayerLoopHook.cs +106 -0
  170. package/Runtime/Core/Pooling/EvictionPlayerLoopHook.cs.meta +11 -0
  171. package/Runtime/Core/Pooling/IDxMessagingClock.cs +18 -0
  172. package/Runtime/Core/Pooling/IDxMessagingClock.cs.meta +11 -0
  173. package/Runtime/Core/Pooling/PoolDiagnosticsSnapshot.cs +55 -0
  174. package/Runtime/Core/Pooling/PoolDiagnosticsSnapshot.cs.meta +11 -0
  175. package/Runtime/Core/Pooling/StopwatchClock.cs +27 -0
  176. package/Runtime/Core/Pooling/StopwatchClock.cs.meta +11 -0
  177. package/Runtime/Core/Pooling/UnityRealtimeClock.cs +31 -0
  178. package/Runtime/Core/Pooling/UnityRealtimeClock.cs.meta +11 -0
  179. package/Runtime/Core/Pooling.meta +9 -0
  180. package/Runtime/Core.meta +8 -8
  181. package/Runtime/Unity/CurrentGlobalMessageBusProvider.cs.meta +12 -12
  182. package/Runtime/Unity/DxMessagingRuntimeInitializer.cs.meta +11 -11
  183. package/Runtime/Unity/InitialGlobalMessageBusProvider.cs.meta +12 -12
  184. package/Runtime/Unity/Integrations/Reflex/AssemblyInfo.cs.meta +11 -3
  185. package/Runtime/Unity/Integrations/Reflex/ReflexRegistrationInstaller.cs +73 -0
  186. package/Runtime/Unity/Integrations/Reflex/ReflexRegistrationInstaller.cs.meta +11 -11
  187. package/Runtime/Unity/Integrations/Reflex/WallstopStudios.DxMessaging.Reflex.asmdef +20 -20
  188. package/Runtime/Unity/Integrations/Reflex/WallstopStudios.DxMessaging.Reflex.asmdef.meta +7 -7
  189. package/Runtime/Unity/Integrations/Reflex.meta +8 -8
  190. package/Runtime/Unity/Integrations/VContainer/AssemblyInfo.cs.meta +11 -3
  191. package/Runtime/Unity/Integrations/VContainer/VContainerRegistrationExtensions.cs +109 -1
  192. package/Runtime/Unity/Integrations/VContainer/VContainerRegistrationExtensions.cs.meta +11 -11
  193. package/Runtime/Unity/Integrations/VContainer/WallstopStudios.DxMessaging.VContainer.asmdef +30 -30
  194. package/Runtime/Unity/Integrations/VContainer/WallstopStudios.DxMessaging.VContainer.asmdef.meta +7 -7
  195. package/Runtime/Unity/Integrations/VContainer.meta +8 -8
  196. package/Runtime/Unity/Integrations/Zenject/AssemblyInfo.cs.meta +11 -3
  197. package/Runtime/Unity/Integrations/Zenject/WallstopStudios.DxMessaging.Zenject.asmdef +30 -30
  198. package/Runtime/Unity/Integrations/Zenject/WallstopStudios.DxMessaging.Zenject.asmdef.meta +7 -7
  199. package/Runtime/Unity/Integrations/Zenject/ZenjectRegistrationInstaller.cs +79 -1
  200. package/Runtime/Unity/Integrations/Zenject/ZenjectRegistrationInstaller.cs.meta +11 -11
  201. package/Runtime/Unity/Integrations/Zenject.meta +8 -8
  202. package/Runtime/Unity/Integrations.meta +8 -8
  203. package/Runtime/Unity/MessageAwareComponent.cs +74 -0
  204. package/Runtime/Unity/MessageAwareComponent.cs.meta +11 -11
  205. package/Runtime/Unity/MessageBusProviderHandle.cs.meta +12 -12
  206. package/Runtime/Unity/MessagingComponent.cs +43 -10
  207. package/Runtime/Unity/MessagingComponent.cs.meta +11 -11
  208. package/Runtime/Unity/MessagingComponentInstaller.cs.meta +12 -12
  209. package/Runtime/Unity/ScriptableMessageBusProvider.cs.meta +12 -12
  210. package/Runtime/Unity.meta +8 -8
  211. package/Runtime/WallstopStudios.DxMessaging.asmdef +14 -14
  212. package/Runtime/WallstopStudios.DxMessaging.asmdef.meta +7 -7
  213. package/Runtime.meta +8 -8
  214. package/Samples~/DI/Prefabs/MessagingInstallerSample.prefab +98 -98
  215. package/Samples~/DI/Prefabs/MessagingInstallerSample.prefab.meta +7 -7
  216. package/Samples~/DI/Prefabs.meta +8 -8
  217. package/Samples~/DI/Providers/GlobalMessageBusProvider.asset +14 -14
  218. package/Samples~/DI/Providers/GlobalMessageBusProvider.asset.meta +8 -8
  219. package/Samples~/DI/Providers/InitialGlobalMessageBusProvider.asset +14 -14
  220. package/Samples~/DI/Providers/InitialGlobalMessageBusProvider.asset.meta +8 -8
  221. package/Samples~/DI/Providers.meta +8 -8
  222. package/Samples~/DI/README.md +51 -51
  223. package/Samples~/DI/README.md.meta +7 -7
  224. package/Samples~/DI/Reflex/SampleInstaller.cs +7 -0
  225. package/Samples~/DI/Reflex/SampleInstaller.cs.meta +11 -11
  226. package/Samples~/DI/Reflex.meta +8 -8
  227. package/Samples~/DI/VContainer/SampleLifetimeScope.cs +6 -1
  228. package/Samples~/DI/VContainer/SampleLifetimeScope.cs.meta +11 -11
  229. package/Samples~/DI/VContainer.meta +8 -8
  230. package/Samples~/DI/Zenject/SampleInstaller.cs +8 -0
  231. package/Samples~/DI/Zenject/SampleInstaller.cs.meta +11 -11
  232. package/Samples~/DI/Zenject.meta +8 -8
  233. package/Samples~/DI.meta +8 -8
  234. package/Samples~/Mini Combat/Boot.cs.meta +11 -11
  235. package/Samples~/Mini Combat/Enemy.cs.meta +11 -11
  236. package/Samples~/Mini Combat/Messages.cs.meta +11 -11
  237. package/Samples~/Mini Combat/Player.cs.meta +11 -11
  238. package/Samples~/Mini Combat/README.md +324 -323
  239. package/Samples~/Mini Combat/README.md.meta +7 -7
  240. package/Samples~/Mini Combat/UIOverlay.cs.meta +11 -11
  241. package/Samples~/Mini Combat/Walkthrough.md +430 -430
  242. package/Samples~/Mini Combat/Walkthrough.md.meta +7 -7
  243. package/Samples~/Mini Combat/WallstopStudios.DxMessaging.MiniCombat.Sample.asmdef +13 -13
  244. package/Samples~/Mini Combat/WallstopStudios.DxMessaging.MiniCombat.Sample.asmdef.meta +7 -7
  245. package/Samples~/Mini Combat.meta +8 -8
  246. package/Samples~/UI Buttons + Inspector/DiagnosticsEnabler.cs.meta +11 -11
  247. package/Samples~/UI Buttons + Inspector/Messages.cs.meta +11 -11
  248. package/Samples~/UI Buttons + Inspector/MessagingObserver.cs.meta +11 -11
  249. package/Samples~/UI Buttons + Inspector/README.md +210 -209
  250. package/Samples~/UI Buttons + Inspector/README.md.meta +7 -7
  251. package/Samples~/UI Buttons + Inspector/UIButtonEmitter.cs.meta +11 -11
  252. package/Samples~/UI Buttons + Inspector/WallstopStudios.DxMessaging.UIButtons.Sample.asmdef +13 -13
  253. package/Samples~/UI Buttons + Inspector/WallstopStudios.DxMessaging.UIButtons.Sample.asmdef.meta +7 -7
  254. package/Samples~/UI Buttons + Inspector.meta +8 -8
  255. package/SourceGenerators/Directory.Build.props +50 -3
  256. package/SourceGenerators/Directory.Build.props.meta +7 -7
  257. package/SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators/DxAutoConstructorGenerator.cs +96 -63
  258. package/SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators/DxAutoConstructorGenerator.cs.meta +11 -11
  259. package/SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators/DxMessageIdGenerator.cs +745 -87
  260. package/SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators/DxMessageIdGenerator.cs.meta +11 -3
  261. package/SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators.csproj +39 -46
  262. package/SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators.csproj.meta +7 -7
  263. package/SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators.meta +8 -8
  264. package/SourceGenerators/global.json +7 -0
  265. package/SourceGenerators/global.json.meta +7 -0
  266. package/SourceGenerators.meta +8 -8
  267. package/Third Party Notices.md +3 -3
  268. package/Third Party Notices.md.meta +7 -7
  269. package/package.json +102 -92
  270. package/package.json.meta +7 -7
@@ -15,7 +15,7 @@ namespace DxMessaging.Core.DataStructure
15
15
  [Serializable]
16
16
  internal sealed class CyclicBuffer<T> : IReadOnlyList<T>
17
17
  {
18
- public struct CyclicBufferEnumerator : IEnumerator<T>
18
+ internal struct CyclicBufferEnumerator : IEnumerator<T>
19
19
  {
20
20
  private readonly CyclicBuffer<T> _buffer;
21
21
 
@@ -70,13 +70,15 @@ namespace DxMessaging.Core.DataStructure
70
70
  /// <summary>Maximum number of elements retained in the buffer.</summary>
71
71
  public int Capacity { get; private set; }
72
72
 
73
- /// <summary>Current number of elements stored ( <see cref="Capacity"/>).</summary>
73
+ /// <summary>Current number of elements stored (<= <see cref="Capacity"/>).</summary>
74
74
  public int Count { get; private set; }
75
75
 
76
76
  private readonly List<T> _buffer;
77
77
  private readonly List<T> _cache;
78
78
  private int _position;
79
79
 
80
+ internal int ScratchCacheCount => _cache.Count;
81
+
80
82
  /// <summary>
81
83
  /// Accesses the element at the specified chronological index (0 = oldest).
82
84
  /// </summary>
@@ -180,30 +182,37 @@ namespace DxMessaging.Core.DataStructure
180
182
  comparer ??= EqualityComparer<T>.Default;
181
183
 
182
184
  _cache.Clear();
183
- for (int i = 0; i < Count; ++i)
185
+ try
184
186
  {
185
- _cache.Add(_buffer[AdjustedIndexFor(i)]);
186
- }
187
+ for (int i = 0; i < Count; ++i)
188
+ {
189
+ _cache.Add(_buffer[AdjustedIndexFor(i)]);
190
+ }
187
191
 
188
- // Find and remove the element
189
- bool removed = false;
190
- for (int i = 0; i < _cache.Count; ++i)
191
- {
192
- if (comparer.Equals(_cache[i], element))
192
+ // Find and remove the element
193
+ bool removed = false;
194
+ for (int i = 0; i < _cache.Count; ++i)
193
195
  {
194
- _cache.RemoveAt(i);
195
- removed = true;
196
- break;
196
+ if (comparer.Equals(_cache[i], element))
197
+ {
198
+ _cache.RemoveAt(i);
199
+ removed = true;
200
+ break;
201
+ }
197
202
  }
198
- }
199
203
 
200
- if (!removed)
204
+ if (!removed)
205
+ {
206
+ return false;
207
+ }
208
+
209
+ RebuildFromCache();
210
+ return true;
211
+ }
212
+ finally
201
213
  {
202
- return false;
214
+ _cache.Clear();
203
215
  }
204
-
205
- RebuildFromCache();
206
- return true;
207
216
  }
208
217
 
209
218
  /// <summary>
@@ -219,19 +228,26 @@ namespace DxMessaging.Core.DataStructure
219
228
  }
220
229
 
221
230
  _cache.Clear();
222
- for (int i = 0; i < Count; ++i)
231
+ try
223
232
  {
224
- _cache.Add(_buffer[AdjustedIndexFor(i)]);
225
- }
233
+ for (int i = 0; i < Count; ++i)
234
+ {
235
+ _cache.Add(_buffer[AdjustedIndexFor(i)]);
236
+ }
237
+
238
+ int removedCount = _cache.RemoveAll(predicate);
239
+ if (removedCount == 0)
240
+ {
241
+ return 0;
242
+ }
226
243
 
227
- int removedCount = _cache.RemoveAll(predicate);
228
- if (removedCount == 0)
244
+ RebuildFromCache();
245
+ return removedCount;
246
+ }
247
+ finally
229
248
  {
230
- return 0;
249
+ _cache.Clear();
231
250
  }
232
-
233
- RebuildFromCache();
234
- return removedCount;
235
251
  }
236
252
 
237
253
  private void RebuildFromCache()
@@ -240,6 +256,7 @@ namespace DxMessaging.Core.DataStructure
240
256
  _buffer.AddRange(_cache);
241
257
  Count = _cache.Count;
242
258
  _position = Count < Capacity ? Count : 0;
259
+ _cache.Clear();
243
260
  }
244
261
 
245
262
  /// <summary>
@@ -250,6 +267,7 @@ namespace DxMessaging.Core.DataStructure
250
267
  Count = 0;
251
268
  _position = 0;
252
269
  _buffer.Clear();
270
+ _cache.Clear();
253
271
  }
254
272
 
255
273
  /// <summary>
@@ -1,3 +1,11 @@
1
- fileFormatVersion: 2
2
- guid: 7d8dbf8640e24846bf35fb18a1b7c504
3
- timeCreated: 1749671893
1
+ fileFormatVersion: 2
2
+ guid: 7d8dbf8640e24846bf35fb18a1b7c504
3
+ MonoImporter:
4
+ externalObjects: {}
5
+ serializedVersion: 2
6
+ defaultReferences: []
7
+ executionOrder: 0
8
+ icon: {instanceID: 0}
9
+ userData:
10
+ assetBundleName:
11
+ assetBundleVariant:
@@ -1,3 +1,3 @@
1
- fileFormatVersion: 2
2
- guid: 9862044472704c86ade5612ddcdfd5b5
1
+ fileFormatVersion: 2
2
+ guid: 9862044472704c86ade5612ddcdfd5b5
3
3
  timeCreated: 1749671887
@@ -1,3 +1,11 @@
1
- fileFormatVersion: 2
2
- guid: 8eafaabae0f549ec82f67ea18be788e1
3
- timeCreated: 1749672335
1
+ fileFormatVersion: 2
2
+ guid: 8eafaabae0f549ec82f67ea18be788e1
3
+ MonoImporter:
4
+ externalObjects: {}
5
+ serializedVersion: 2
6
+ defaultReferences: []
7
+ executionOrder: 0
8
+ icon: {instanceID: 0}
9
+ userData:
10
+ assetBundleName:
11
+ assetBundleVariant:
@@ -1,3 +1,11 @@
1
- fileFormatVersion: 2
2
- guid: 01598791b01241caabfecea4c1f5880d
3
- timeCreated: 1749672447
1
+ fileFormatVersion: 2
2
+ guid: 01598791b01241caabfecea4c1f5880d
3
+ MonoImporter:
4
+ externalObjects: {}
5
+ serializedVersion: 2
6
+ defaultReferences: []
7
+ executionOrder: 0
8
+ icon: {instanceID: 0}
9
+ userData:
10
+ assetBundleName:
11
+ assetBundleVariant:
@@ -1,3 +1,11 @@
1
- fileFormatVersion: 2
2
- guid: 7d393cfbb3c8429d83af17a737fdaf0e
3
- timeCreated: 1749672471
1
+ fileFormatVersion: 2
2
+ guid: 7d393cfbb3c8429d83af17a737fdaf0e
3
+ MonoImporter:
4
+ externalObjects: {}
5
+ serializedVersion: 2
6
+ defaultReferences: []
7
+ executionOrder: 0
8
+ icon: {instanceID: 0}
9
+ userData:
10
+ assetBundleName:
11
+ assetBundleVariant:
@@ -1,3 +1,3 @@
1
- fileFormatVersion: 2
2
- guid: 9606a03ced274c3888a4d993309786a4
1
+ fileFormatVersion: 2
2
+ guid: 9606a03ced274c3888a4d993309786a4
3
3
  timeCreated: 1749672323
@@ -50,7 +50,26 @@ namespace DxMessaging.Core
50
50
  MessageRegistrationHandle.SetIdSeed(Baseline.MessageRegistrationHandleSeed);
51
51
  MessageRegistrationBuilder.SetSyntheticOwnerCounter(Baseline.SyntheticOwnerCounter);
52
52
 
53
+ // Capture the active global bus before ResetStatics swaps it back to the default
54
+ // instance. If a user installed a custom global bus via SetGlobalMessageBus, we
55
+ // also bump that bus's reset generation so deregister closures captured against
56
+ // it (e.g. a deferred Object.Destroy that lands after Reset) silently no-op
57
+ // instead of logging spurious over-deregistration errors. We deliberately do NOT
58
+ // call ResetState() on the custom bus -- that would clear its sinks, which the
59
+ // user may have intentionally preserved.
60
+ IMessageBus activeBus = MessageHandler.MessageBus;
61
+ IMessageBus defaultBus = MessageHandler.InitialGlobalMessageBus;
62
+
53
63
  MessageHandler.ResetStatics();
64
+ MessageBus.MessageBus.ResetStaticPools();
65
+
66
+ if (
67
+ !ReferenceEquals(activeBus, defaultBus)
68
+ && activeBus is MessageBus.MessageBus customConcrete
69
+ )
70
+ {
71
+ customConcrete.BumpResetGeneration();
72
+ }
54
73
  }
55
74
  }
56
75
 
@@ -1,11 +1,11 @@
1
- fileFormatVersion: 2
2
- guid: 2fbeee7b1ae4484f978aba9de68b3d1d
3
- MonoImporter:
4
- externalObjects: {}
5
- serializedVersion: 2
6
- defaultReferences: []
7
- executionOrder: 0
8
- icon: {instanceID: 0}
9
- userData:
10
- assetBundleName:
11
- assetBundleVariant:
1
+ fileFormatVersion: 2
2
+ guid: 2fbeee7b1ae4484f978aba9de68b3d1d
3
+ MonoImporter:
4
+ externalObjects: {}
5
+ serializedVersion: 2
6
+ defaultReferences: []
7
+ executionOrder: 0
8
+ icon: {instanceID: 0}
9
+ userData:
10
+ assetBundleName:
11
+ assetBundleVariant:
@@ -2,6 +2,7 @@ namespace DxMessaging.Core.Extensions
2
2
  {
3
3
  using System;
4
4
  using System.Runtime.CompilerServices;
5
+ using DxMessaging.Core.Internal;
5
6
 
6
7
  internal static class EnumExtensions
7
8
  {
@@ -26,12 +27,12 @@ namespace DxMessaging.Core.Extensions
26
27
  {
27
28
  try
28
29
  {
29
- return Unsafe.SizeOf<T>() switch
30
+ return DxUnsafe.SizeOf<T>() switch
30
31
  {
31
- 1 => Unsafe.As<T, byte>(ref value),
32
- 2 => Unsafe.As<T, ushort>(ref value),
33
- 4 => Unsafe.As<T, uint>(ref value),
34
- 8 => Unsafe.As<T, ulong>(ref value),
32
+ 1 => DxUnsafe.As<T, byte>(ref value),
33
+ 2 => DxUnsafe.As<T, ushort>(ref value),
34
+ 4 => DxUnsafe.As<T, uint>(ref value),
35
+ 8 => DxUnsafe.As<T, ulong>(ref value),
35
36
  _ => null,
36
37
  };
37
38
  }
@@ -1,3 +1,11 @@
1
- fileFormatVersion: 2
2
- guid: f01ee914d7634a69a85f86bb02f2f07e
3
- timeCreated: 1745162639
1
+ fileFormatVersion: 2
2
+ guid: f01ee914d7634a69a85f86bb02f2f07e
3
+ MonoImporter:
4
+ externalObjects: {}
5
+ serializedVersion: 2
6
+ defaultReferences: []
7
+ executionOrder: 0
8
+ icon: {instanceID: 0}
9
+ userData:
10
+ assetBundleName:
11
+ assetBundleVariant:
@@ -1,3 +1,11 @@
1
- fileFormatVersion: 2
2
- guid: f6956caef19744a0b0d96215d4e5154a
3
- timeCreated: 1749671953
1
+ fileFormatVersion: 2
2
+ guid: f6956caef19744a0b0d96215d4e5154a
3
+ MonoImporter:
4
+ externalObjects: {}
5
+ serializedVersion: 2
6
+ defaultReferences: []
7
+ executionOrder: 0
8
+ icon: {instanceID: 0}
9
+ userData:
10
+ assetBundleName:
11
+ assetBundleVariant:
@@ -1,12 +1,12 @@
1
- fileFormatVersion: 2
2
- guid: 2d2a3b7979da4f248a398e05be9f83d4
3
- MonoImporter:
4
- externalObjects: {}
5
- serializedVersion: 2
6
- defaultReferences: []
7
- executionOrder: 0
8
- icon: {instanceID: 0}
9
- userData:
10
- assetBundleName:
11
- assetBundleVariant:
12
-
1
+ fileFormatVersion: 2
2
+ guid: 2d2a3b7979da4f248a398e05be9f83d4
3
+ MonoImporter:
4
+ externalObjects: {}
5
+ serializedVersion: 2
6
+ defaultReferences: []
7
+ executionOrder: 0
8
+ icon: {instanceID: 0}
9
+ userData:
10
+ assetBundleName:
11
+ assetBundleVariant:
12
+
@@ -79,12 +79,6 @@ namespace DxMessaging.Core.Extensions
79
79
  {
80
80
  InstanceId targetId = target;
81
81
  IMessageBus resolvedBus = ResolveMessageBus(messageBus, messageBusProvider);
82
- if (typeof(TMessage) == typeof(ITargetedMessage))
83
- {
84
- resolvedBus.UntypedTargetedBroadcast(targetId, message);
85
- return;
86
- }
87
-
88
82
  resolvedBus.TargetedBroadcast(ref targetId, ref message);
89
83
  }
90
84
 
@@ -129,12 +123,6 @@ namespace DxMessaging.Core.Extensions
129
123
  {
130
124
  InstanceId targetId = target;
131
125
  IMessageBus resolvedBus = ResolveMessageBus(messageBus, messageBusProvider);
132
- if (typeof(TMessage) == typeof(ITargetedMessage))
133
- {
134
- resolvedBus.UntypedTargetedBroadcast(targetId, message);
135
- return;
136
- }
137
-
138
126
  resolvedBus.TargetedBroadcast(ref targetId, ref message);
139
127
  }
140
128
  #endif
@@ -178,12 +166,6 @@ namespace DxMessaging.Core.Extensions
178
166
  where TMessage : struct, ITargetedMessage
179
167
  {
180
168
  IMessageBus resolvedBus = ResolveMessageBus(messageBus, messageBusProvider);
181
- if (typeof(TMessage) == typeof(ITargetedMessage))
182
- {
183
- resolvedBus.UntypedTargetedBroadcast(target, message);
184
- return;
185
- }
186
-
187
169
  resolvedBus.TargetedBroadcast(ref target, ref message);
188
170
  }
189
171
 
@@ -259,12 +241,6 @@ namespace DxMessaging.Core.Extensions
259
241
  where TMessage : struct, IUntargetedMessage
260
242
  {
261
243
  IMessageBus resolvedBus = ResolveMessageBus(messageBus, messageBusProvider);
262
- if (typeof(TMessage) == typeof(IUntargetedMessage))
263
- {
264
- resolvedBus.UntypedUntargetedBroadcast(message);
265
- return;
266
- }
267
-
268
244
  resolvedBus.UntargetedBroadcast(ref message);
269
245
  }
270
246
 
@@ -296,12 +272,6 @@ namespace DxMessaging.Core.Extensions
296
272
  where TMessage : struct, IUntargetedMessage
297
273
  {
298
274
  IMessageBus resolvedBus = ResolveMessageBus(messageBus, messageBusProvider);
299
- if (typeof(TMessage) == typeof(IUntargetedMessage))
300
- {
301
- resolvedBus.UntypedUntargetedBroadcast(message);
302
- return;
303
- }
304
-
305
275
  resolvedBus.UntargetedBroadcast(ref message);
306
276
  }
307
277
 
@@ -341,12 +311,6 @@ namespace DxMessaging.Core.Extensions
341
311
  where TMessage : struct, ITargetedMessage
342
312
  {
343
313
  IMessageBus resolvedBus = ResolveMessageBus(messageBus, messageBusProvider);
344
- if (typeof(TMessage) == typeof(ITargetedMessage))
345
- {
346
- resolvedBus.UntypedTargetedBroadcast(target, message);
347
- return;
348
- }
349
-
350
314
  resolvedBus.TargetedBroadcast(ref target, ref message);
351
315
  }
352
316
 
@@ -386,12 +350,6 @@ namespace DxMessaging.Core.Extensions
386
350
  where TMessage : struct, IBroadcastMessage
387
351
  {
388
352
  IMessageBus resolvedBus = ResolveMessageBus(messageBus, messageBusProvider);
389
- if (typeof(TMessage) == typeof(ITargetedMessage))
390
- {
391
- resolvedBus.UntypedSourcedBroadcast(source, message);
392
- return;
393
- }
394
-
395
353
  resolvedBus.SourcedBroadcast(ref source, ref message);
396
354
  }
397
355
 
@@ -437,12 +395,6 @@ namespace DxMessaging.Core.Extensions
437
395
  {
438
396
  InstanceId sourceId = source;
439
397
  IMessageBus resolvedBus = ResolveMessageBus(messageBus, messageBusProvider);
440
- if (typeof(TMessage) == typeof(IBroadcastMessage))
441
- {
442
- resolvedBus.UntypedSourcedBroadcast(sourceId, message);
443
- return;
444
- }
445
-
446
398
  resolvedBus.SourcedBroadcast(ref sourceId, ref message);
447
399
  }
448
400
 
@@ -487,12 +439,6 @@ namespace DxMessaging.Core.Extensions
487
439
  {
488
440
  InstanceId sourceId = source;
489
441
  IMessageBus resolvedBus = ResolveMessageBus(messageBus, messageBusProvider);
490
- if (typeof(TMessage) == typeof(IBroadcastMessage))
491
- {
492
- resolvedBus.UntypedSourcedBroadcast(sourceId, message);
493
- return;
494
- }
495
-
496
442
  resolvedBus.SourcedBroadcast(ref sourceId, ref message);
497
443
  }
498
444
  #endif
@@ -536,12 +482,6 @@ namespace DxMessaging.Core.Extensions
536
482
  where TMessage : struct, IBroadcastMessage
537
483
  {
538
484
  IMessageBus resolvedBus = ResolveMessageBus(messageBus, messageBusProvider);
539
- if (typeof(TMessage) == typeof(IBroadcastMessage))
540
- {
541
- resolvedBus.UntypedSourcedBroadcast(source, message);
542
- return;
543
- }
544
-
545
485
  resolvedBus.SourcedBroadcast(ref source, ref message);
546
486
  }
547
487
 
@@ -1,11 +1,11 @@
1
- fileFormatVersion: 2
2
- guid: 760f3c3fe4dffe647b41eef37728c4f4
3
- MonoImporter:
4
- externalObjects: {}
5
- serializedVersion: 2
6
- defaultReferences: []
7
- executionOrder: 0
8
- icon: {instanceID: 0}
9
- userData:
10
- assetBundleName:
11
- assetBundleVariant:
1
+ fileFormatVersion: 2
2
+ guid: 760f3c3fe4dffe647b41eef37728c4f4
3
+ MonoImporter:
4
+ externalObjects: {}
5
+ serializedVersion: 2
6
+ defaultReferences: []
7
+ executionOrder: 0
8
+ icon: {instanceID: 0}
9
+ userData:
10
+ assetBundleName:
11
+ assetBundleVariant:
@@ -1,8 +1,8 @@
1
- fileFormatVersion: 2
2
- guid: 963c131823f1c5948a69209dbac6533f
3
- folderAsset: yes
4
- DefaultImporter:
5
- externalObjects: {}
6
- userData:
7
- assetBundleName:
8
- assetBundleVariant:
1
+ fileFormatVersion: 2
2
+ guid: 963c131823f1c5948a69209dbac6533f
3
+ folderAsset: yes
4
+ DefaultImporter:
5
+ externalObjects: {}
6
+ userData:
7
+ assetBundleName:
8
+ assetBundleVariant:
@@ -155,6 +155,25 @@ namespace DxMessaging.Core.Helper
155
155
  return false;
156
156
  }
157
157
 
158
+ /// <summary>
159
+ /// Attempts to get the value at an already-resolved message type index.
160
+ /// </summary>
161
+ /// <param name="index">Index previously assigned by <see cref="MessageHelperIndexer{TMessage}"/>.</param>
162
+ /// <param name="value">Out parameter receiving the value if present.</param>
163
+ /// <returns>True if a non-null value was present.</returns>
164
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
165
+ internal bool TryGetValueAtIndex(int index, out TValue value)
166
+ {
167
+ if (0 <= index && index < _values.Count)
168
+ {
169
+ value = _values[index];
170
+ return value != null;
171
+ }
172
+
173
+ value = default;
174
+ return false;
175
+ }
176
+
158
177
  /// <summary>
159
178
  /// Removes the value for the given <typeparamref name="TMessage"/> key.
160
179
  /// </summary>
@@ -170,6 +189,19 @@ namespace DxMessaging.Core.Helper
170
189
  }
171
190
  }
172
191
 
192
+ /// <summary>
193
+ /// Removes the value at an already-resolved message type index.
194
+ /// </summary>
195
+ /// <param name="index">Index previously assigned by <see cref="MessageHelperIndexer{TMessage}"/>.</param>
196
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
197
+ internal void RemoveAtIndex(int index)
198
+ {
199
+ if (0 <= index && index < _values.Count)
200
+ {
201
+ _values[index] = null;
202
+ }
203
+ }
204
+
173
205
  /// <summary>
174
206
  /// Returns an enumerator iterating over non-null entries in insertion order.
175
207
  /// </summary>
@@ -1,3 +1,11 @@
1
- fileFormatVersion: 2
2
- guid: 23cb3bf7f25d479c862736482ee96fa7
3
- timeCreated: 1745102344
1
+ fileFormatVersion: 2
2
+ guid: 23cb3bf7f25d479c862736482ee96fa7
3
+ MonoImporter:
4
+ externalObjects: {}
5
+ serializedVersion: 2
6
+ defaultReferences: []
7
+ executionOrder: 0
8
+ icon: {instanceID: 0}
9
+ userData:
10
+ assetBundleName:
11
+ assetBundleVariant:
@@ -1,3 +1,11 @@
1
- fileFormatVersion: 2
2
- guid: 612c352c3d984a3486ac4b19bb69fa37
3
- timeCreated: 1745101032
1
+ fileFormatVersion: 2
2
+ guid: 612c352c3d984a3486ac4b19bb69fa37
3
+ MonoImporter:
4
+ externalObjects: {}
5
+ serializedVersion: 2
6
+ defaultReferences: []
7
+ executionOrder: 0
8
+ icon: {instanceID: 0}
9
+ userData:
10
+ assetBundleName:
11
+ assetBundleVariant:
@@ -1,3 +1,3 @@
1
- fileFormatVersion: 2
2
- guid: 351ee8f890884099b6c7c32e66f196a9
1
+ fileFormatVersion: 2
2
+ guid: 351ee8f890884099b6c7c32e66f196a9
3
3
  timeCreated: 1745100990
@@ -8,9 +8,9 @@ namespace DxMessaging.Core
8
8
  /// <remarks>
9
9
  /// DxMessaging models three primary categories of messages:
10
10
  /// <list type="bullet">
11
- /// <item><description><see cref="Messages.IUntargetedMessage"/> global notifications (for example: settings changed).</description></item>
12
- /// <item><description><see cref="Messages.ITargetedMessage"/> commands or events directed at a specific target.</description></item>
13
- /// <item><description><see cref="Messages.IBroadcastMessage"/> events emitted by a specific source and consumable by any listener.</description></item>
11
+ /// <item><description><see cref="Messages.IUntargetedMessage"/> -- global notifications (for example: settings changed).</description></item>
12
+ /// <item><description><see cref="Messages.ITargetedMessage"/> -- commands or events directed at a specific target.</description></item>
13
+ /// <item><description><see cref="Messages.IBroadcastMessage"/> -- events emitted by a specific source and consumable by any listener.</description></item>
14
14
  /// </list>
15
15
  /// <para>
16
16
  /// Implementors typically use the generic variants (for example, <c>IUntargetedMessage&lt;T&gt;</c>) on <c>struct</c> messages
@@ -1,11 +1,11 @@
1
- fileFormatVersion: 2
2
- guid: 7d57ad19529ae9d4eb2521c7f44af929
3
- MonoImporter:
4
- externalObjects: {}
5
- serializedVersion: 2
6
- defaultReferences: []
7
- executionOrder: 0
8
- icon: {instanceID: 0}
9
- userData:
10
- assetBundleName:
11
- assetBundleVariant:
1
+ fileFormatVersion: 2
2
+ guid: 7d57ad19529ae9d4eb2521c7f44af929
3
+ MonoImporter:
4
+ externalObjects: {}
5
+ serializedVersion: 2
6
+ defaultReferences: []
7
+ executionOrder: 0
8
+ icon: {instanceID: 0}
9
+ userData:
10
+ assetBundleName:
11
+ assetBundleVariant: