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
@@ -0,0 +1,106 @@
1
+ #if UNITY_2021_3_OR_NEWER
2
+ namespace DxMessaging.Core.Pooling
3
+ {
4
+ using System;
5
+ using MessageBus;
6
+ using UnityEngine;
7
+ using UnityEngine.LowLevel;
8
+ using UnityEngine.PlayerLoop;
9
+
10
+ /// <summary>
11
+ /// Unity PlayerLoop bridge that gives idle eviction a cadence even when no
12
+ /// messages are emitted.
13
+ /// </summary>
14
+ internal static class EvictionPlayerLoopHook
15
+ {
16
+ private static readonly Type HookType = typeof(EvictionPlayerLoopHook);
17
+
18
+ [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)]
19
+ private static void Install()
20
+ {
21
+ PlayerLoopSystem root = PlayerLoop.GetCurrentPlayerLoop();
22
+ if (InstallInto(ref root))
23
+ {
24
+ PlayerLoop.SetPlayerLoop(root);
25
+ }
26
+ }
27
+
28
+ internal static bool InstallInto(ref PlayerLoopSystem root)
29
+ {
30
+ if (ContainsHook(root))
31
+ {
32
+ return false;
33
+ }
34
+
35
+ PlayerLoopSystem hook = new PlayerLoopSystem
36
+ {
37
+ type = HookType,
38
+ updateDelegate = SweepIdleBuses,
39
+ };
40
+
41
+ return InsertUnder<Update>(ref root, hook);
42
+ }
43
+
44
+ private static void SweepIdleBuses()
45
+ {
46
+ MessageBus.SweepIdleBusesFromPlayerLoop();
47
+ }
48
+
49
+ internal static bool ContainsHook(PlayerLoopSystem system)
50
+ {
51
+ if (system.type == HookType)
52
+ {
53
+ return true;
54
+ }
55
+
56
+ PlayerLoopSystem[] subsystems = system.subSystemList;
57
+ if (subsystems == null)
58
+ {
59
+ return false;
60
+ }
61
+
62
+ for (int i = 0; i < subsystems.Length; ++i)
63
+ {
64
+ if (ContainsHook(subsystems[i]))
65
+ {
66
+ return true;
67
+ }
68
+ }
69
+
70
+ return false;
71
+ }
72
+
73
+ private static bool InsertUnder<TTarget>(ref PlayerLoopSystem system, PlayerLoopSystem hook)
74
+ {
75
+ if (system.type == typeof(TTarget))
76
+ {
77
+ PlayerLoopSystem[] oldList =
78
+ system.subSystemList ?? Array.Empty<PlayerLoopSystem>();
79
+ PlayerLoopSystem[] newList = new PlayerLoopSystem[oldList.Length + 1];
80
+ Array.Copy(oldList, newList, oldList.Length);
81
+ newList[oldList.Length] = hook;
82
+ system.subSystemList = newList;
83
+ return true;
84
+ }
85
+
86
+ PlayerLoopSystem[] subsystems = system.subSystemList;
87
+ if (subsystems == null)
88
+ {
89
+ return false;
90
+ }
91
+
92
+ for (int i = 0; i < subsystems.Length; ++i)
93
+ {
94
+ PlayerLoopSystem child = subsystems[i];
95
+ if (InsertUnder<TTarget>(ref child, hook))
96
+ {
97
+ subsystems[i] = child;
98
+ return true;
99
+ }
100
+ }
101
+
102
+ return false;
103
+ }
104
+ }
105
+ }
106
+ #endif
@@ -0,0 +1,11 @@
1
+ fileFormatVersion: 2
2
+ guid: 602373063d7d7c9ffa4ad551b255fa20
3
+ MonoImporter:
4
+ externalObjects: {}
5
+ serializedVersion: 2
6
+ defaultReferences: []
7
+ executionOrder: 0
8
+ icon: {instanceID: 0}
9
+ userData:
10
+ assetBundleName:
11
+ assetBundleVariant:
@@ -0,0 +1,18 @@
1
+ namespace DxMessaging.Core.Pooling
2
+ {
3
+ /// <summary>
4
+ /// Abstraction over a monotonic wall-clock used by the eviction sweeper to
5
+ /// decide whether enough time has elapsed since the last sweep. Implementations
6
+ /// must be cheap (single field read or call) because sampled idle-sweep gates
7
+ /// sit on the emit path.
8
+ /// </summary>
9
+ public interface IDxMessagingClock
10
+ {
11
+ /// <summary>
12
+ /// Current time in seconds. Must be non-decreasing within a single
13
+ /// AppDomain. Implementations may have frame-grained or millisecond-grained
14
+ /// resolution; the eviction sweeper tolerates either.
15
+ /// </summary>
16
+ double NowSeconds { get; }
17
+ }
18
+ }
@@ -0,0 +1,11 @@
1
+ fileFormatVersion: 2
2
+ guid: 4281977f55958ae6077358d9bd484a8a
3
+ MonoImporter:
4
+ externalObjects: {}
5
+ serializedVersion: 2
6
+ defaultReferences: []
7
+ executionOrder: 0
8
+ icon: {instanceID: 0}
9
+ userData:
10
+ assetBundleName:
11
+ assetBundleVariant:
@@ -0,0 +1,55 @@
1
+ namespace DxMessaging.Core.Pooling
2
+ {
3
+ /// <summary>
4
+ /// Aggregate snapshot of every <see cref="DxPools"/> pool. Returned by
5
+ /// <see cref="DxPools.DescribeAll"/>. Pool names are stable, human-readable
6
+ /// strings safe to log.
7
+ /// </summary>
8
+ internal readonly struct PoolDiagnosticsSnapshot
9
+ {
10
+ /// <summary><c>Dictionary&lt;InstanceId, object&gt;</c> pool diagnostics.</summary>
11
+ public readonly CollectionPoolDiagnostics InstanceIdDicts;
12
+
13
+ /// <summary><c>List&lt;InstanceId&gt;</c> pool diagnostics.</summary>
14
+ public readonly CollectionPoolDiagnostics InstanceIdLists;
15
+
16
+ /// <summary><c>HashSet&lt;InstanceId&gt;</c> pool diagnostics.</summary>
17
+ public readonly CollectionPoolDiagnostics InstanceIdSets;
18
+
19
+ /// <summary><c>List&lt;object&gt;</c> pool diagnostics.</summary>
20
+ public readonly CollectionPoolDiagnostics ObjectLists;
21
+
22
+ /// <summary><c>Stack&lt;object&gt;</c> pool diagnostics.</summary>
23
+ public readonly CollectionPoolDiagnostics ObjectStacks;
24
+
25
+ /// <summary><c>HashSet&lt;int&gt;</c> pool diagnostics.</summary>
26
+ public readonly CollectionPoolDiagnostics IntSets;
27
+
28
+ /// <summary>Typed handler <c>InstanceId -&gt; priority-cache</c> dictionary pool diagnostics.</summary>
29
+ public readonly CollectionPoolDiagnostics TypedHandlerContextDicts;
30
+
31
+ /// <summary>Typed handler priority-cache dictionary pool diagnostics.</summary>
32
+ public readonly CollectionPoolDiagnostics TypedHandlerPriorityDicts;
33
+
34
+ internal PoolDiagnosticsSnapshot(
35
+ CollectionPoolDiagnostics instanceIdDicts,
36
+ CollectionPoolDiagnostics instanceIdLists,
37
+ CollectionPoolDiagnostics instanceIdSets,
38
+ CollectionPoolDiagnostics objectLists,
39
+ CollectionPoolDiagnostics objectStacks,
40
+ CollectionPoolDiagnostics intSets,
41
+ CollectionPoolDiagnostics typedHandlerContextDicts,
42
+ CollectionPoolDiagnostics typedHandlerPriorityDicts
43
+ )
44
+ {
45
+ InstanceIdDicts = instanceIdDicts;
46
+ InstanceIdLists = instanceIdLists;
47
+ InstanceIdSets = instanceIdSets;
48
+ ObjectLists = objectLists;
49
+ ObjectStacks = objectStacks;
50
+ IntSets = intSets;
51
+ TypedHandlerContextDicts = typedHandlerContextDicts;
52
+ TypedHandlerPriorityDicts = typedHandlerPriorityDicts;
53
+ }
54
+ }
55
+ }
@@ -0,0 +1,11 @@
1
+ fileFormatVersion: 2
2
+ guid: d6ccd3d03e5816684d483eff0c333db9
3
+ MonoImporter:
4
+ externalObjects: {}
5
+ serializedVersion: 2
6
+ defaultReferences: []
7
+ executionOrder: 0
8
+ icon: {instanceID: 0}
9
+ userData:
10
+ assetBundleName:
11
+ assetBundleVariant:
@@ -0,0 +1,27 @@
1
+ namespace DxMessaging.Core.Pooling
2
+ {
3
+ using System.Diagnostics;
4
+ using System.Runtime.CompilerServices;
5
+
6
+ /// <summary>
7
+ /// Default <see cref="IDxMessagingClock"/> backed by a process-lifetime
8
+ /// <see cref="Stopwatch"/>. Monotonic and Unity-agnostic so it works in
9
+ /// EditMode, PlayMode, and standalone test harnesses.
10
+ /// </summary>
11
+ public sealed class StopwatchClock : IDxMessagingClock
12
+ {
13
+ /// <summary>Shared instance. Stopwatch is lock-free and safe to share.</summary>
14
+ public static readonly StopwatchClock Instance = new();
15
+
16
+ private static readonly double TicksToSeconds = 1.0 / Stopwatch.Frequency;
17
+
18
+ private readonly Stopwatch _stopwatch = Stopwatch.StartNew();
19
+
20
+ /// <inheritdoc />
21
+ public double NowSeconds
22
+ {
23
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
24
+ get => _stopwatch.ElapsedTicks * TicksToSeconds;
25
+ }
26
+ }
27
+ }
@@ -0,0 +1,11 @@
1
+ fileFormatVersion: 2
2
+ guid: 75463706ed3c6bed1cd6ad8c4a6a2540
3
+ MonoImporter:
4
+ externalObjects: {}
5
+ serializedVersion: 2
6
+ defaultReferences: []
7
+ executionOrder: 0
8
+ icon: {instanceID: 0}
9
+ userData:
10
+ assetBundleName:
11
+ assetBundleVariant:
@@ -0,0 +1,31 @@
1
+ namespace DxMessaging.Core.Pooling
2
+ {
3
+ #if UNITY_2021_3_OR_NEWER
4
+ using System.Runtime.CompilerServices;
5
+ using UnityEngine;
6
+
7
+ /// <summary>
8
+ /// Unity-only <see cref="IDxMessagingClock"/> backed by
9
+ /// <see cref="Time.realtimeSinceStartupAsDouble"/>. Use this when sweep cadence
10
+ /// should follow Unity wall time rather than the AppDomain Stopwatch (Stopwatch
11
+ /// keeps running across editor pause; Time.realtimeSinceStartupAsDouble also
12
+ /// runs across pause but is the canonical Unity clock).
13
+ /// </summary>
14
+ /// <remarks>
15
+ /// Must be invoked from the Unity main thread; the underlying <c>Time</c>
16
+ /// API throws when called from worker threads.
17
+ /// </remarks>
18
+ public sealed class UnityRealtimeClock : IDxMessagingClock
19
+ {
20
+ /// <summary>Shared instance.</summary>
21
+ public static readonly UnityRealtimeClock Instance = new();
22
+
23
+ /// <inheritdoc />
24
+ public double NowSeconds
25
+ {
26
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
27
+ get => Time.realtimeSinceStartupAsDouble;
28
+ }
29
+ }
30
+ #endif
31
+ }
@@ -0,0 +1,11 @@
1
+ fileFormatVersion: 2
2
+ guid: df867cc00ae023604ee7f8b6a7aa5c7a
3
+ MonoImporter:
4
+ externalObjects: {}
5
+ serializedVersion: 2
6
+ defaultReferences: []
7
+ executionOrder: 0
8
+ icon: {instanceID: 0}
9
+ userData:
10
+ assetBundleName:
11
+ assetBundleVariant:
@@ -0,0 +1,9 @@
1
+ fileFormatVersion: 2
2
+ guid: fc38a1d26fb3ceb14f2c2fa031b313a1
3
+ timeCreated: 1777840186
4
+ folderAsset: yes
5
+ DefaultImporter:
6
+ externalObjects: {}
7
+ userData:
8
+ assetBundleName:
9
+ assetBundleVariant:
package/Runtime/Core.meta CHANGED
@@ -1,8 +1,8 @@
1
- fileFormatVersion: 2
2
- guid: b58cce05d4f7d9447a63e82e2169f927
3
- folderAsset: yes
4
- DefaultImporter:
5
- externalObjects: {}
6
- userData:
7
- assetBundleName:
8
- assetBundleVariant:
1
+ fileFormatVersion: 2
2
+ guid: b58cce05d4f7d9447a63e82e2169f927
3
+ folderAsset: yes
4
+ DefaultImporter:
5
+ externalObjects: {}
6
+ userData:
7
+ assetBundleName:
8
+ assetBundleVariant:
@@ -1,12 +1,12 @@
1
- fileFormatVersion: 2
2
- guid: 689f1e1a8d9f4c34f9e3ab4e3f94ec37
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: 689f1e1a8d9f4c34f9e3ab4e3f94ec37
3
+ MonoImporter:
4
+ externalObjects: {}
5
+ serializedVersion: 2
6
+ defaultReferences: []
7
+ executionOrder: 0
8
+ icon: {instanceID: 0}
9
+ userData:
10
+ assetBundleName:
11
+ assetBundleVariant:
12
+
@@ -1,11 +1,11 @@
1
- fileFormatVersion: 2
2
- guid: 6e7f0de58bcf4f64813ef3650910c653
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: 6e7f0de58bcf4f64813ef3650910c653
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: 1f3f2efbb7f4441ebde8b418d178885a
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: 1f3f2efbb7f4441ebde8b418d178885a
3
+ MonoImporter:
4
+ externalObjects: {}
5
+ serializedVersion: 2
6
+ defaultReferences: []
7
+ executionOrder: 0
8
+ icon: {instanceID: 0}
9
+ userData:
10
+ assetBundleName:
11
+ assetBundleVariant:
12
+
@@ -1,3 +1,11 @@
1
- fileFormatVersion: 2
2
- guid: 978915f0cb9d43d99e46455ff38dc528
3
- timeCreated: 1761517485
1
+ fileFormatVersion: 2
2
+ guid: 978915f0cb9d43d99e46455ff38dc528
3
+ MonoImporter:
4
+ externalObjects: {}
5
+ serializedVersion: 2
6
+ defaultReferences: []
7
+ executionOrder: 0
8
+ icon: {instanceID: 0}
9
+ userData:
10
+ assetBundleName:
11
+ assetBundleVariant:
@@ -2,7 +2,9 @@
2
2
  namespace DxMessaging.Unity.Integrations.Reflex
3
3
  {
4
4
  #if REFLEX_PRESENT
5
+ using System;
5
6
  using Core.MessageBus;
7
+ using Core.Pooling;
6
8
  using global::Reflex.Attributes;
7
9
  using global::Reflex.Core;
8
10
 
@@ -87,6 +89,77 @@ namespace DxMessaging.Unity.Integrations.Reflex
87
89
  }
88
90
  }
89
91
  }
92
+
93
+ /// <summary>
94
+ /// Provides convenience helpers for wiring a <see cref="MessageBus"/> into Reflex containers.
95
+ /// Reflex's container builder defaults to public-only constructor scanning, so today the
96
+ /// bare <c>Bind&lt;MessageBus&gt;().AsSingleton()</c> pattern resolves through the public
97
+ /// parameterless constructor. This is fragile against future Reflex versions that broaden
98
+ /// scanning to non-public constructors -- always prefer the helper below for clarity and
99
+ /// forward compatibility.
100
+ /// </summary>
101
+ public static class ReflexRegistrationExtensions
102
+ {
103
+ /// <summary>
104
+ /// Registers a singleton <see cref="MessageBus"/> exposed as <see cref="IMessageBus"/>
105
+ /// using an explicit factory.
106
+ /// </summary>
107
+ /// <param name="builder">Container builder receiving the registration.</param>
108
+ public static void AddDxMessagingBus(this ContainerBuilder builder)
109
+ {
110
+ if (builder == null)
111
+ {
112
+ throw new ArgumentNullException(nameof(builder));
113
+ }
114
+ builder.AddSingleton(_ => new MessageBus(), typeof(MessageBus), typeof(IMessageBus));
115
+ }
116
+
117
+ /// <summary>
118
+ /// Registers a singleton <see cref="MessageBus"/> exposed as <see cref="IMessageBus"/>
119
+ /// using the supplied factory. Allows callers to inject a custom
120
+ /// <see cref="IDxMessagingClock"/> via <see cref="MessageBus.CreateForInternalUse"/>.
121
+ /// </summary>
122
+ /// <param name="builder">Container builder receiving the registration.</param>
123
+ /// <param name="factory">Delegate that constructs the <see cref="MessageBus"/> instance using the resolver.</param>
124
+ public static void AddDxMessagingBus(
125
+ this ContainerBuilder builder,
126
+ Func<Container, MessageBus> factory
127
+ )
128
+ {
129
+ if (builder == null)
130
+ {
131
+ throw new ArgumentNullException(nameof(builder));
132
+ }
133
+ if (factory == null)
134
+ {
135
+ throw new ArgumentNullException(nameof(factory));
136
+ }
137
+ builder.AddSingleton(factory, typeof(MessageBus), typeof(IMessageBus));
138
+ }
139
+
140
+ /// <summary>
141
+ /// Registers a singleton <see cref="MessageBus"/> exposed as <see cref="IMessageBus"/>
142
+ /// using the supplied <see cref="IDxMessagingClock"/>.
143
+ /// </summary>
144
+ /// <param name="builder">Container builder receiving the registration.</param>
145
+ /// <param name="clock">Clock implementation injected into the bus. Must not be null.</param>
146
+ public static void AddDxMessagingBus(this ContainerBuilder builder, IDxMessagingClock clock)
147
+ {
148
+ if (builder == null)
149
+ {
150
+ throw new ArgumentNullException(nameof(builder));
151
+ }
152
+ if (clock == null)
153
+ {
154
+ throw new ArgumentNullException(nameof(clock));
155
+ }
156
+ builder.AddSingleton(
157
+ _ => MessageBus.CreateForInternalUse(clock),
158
+ typeof(MessageBus),
159
+ typeof(IMessageBus)
160
+ );
161
+ }
162
+ }
90
163
  #endif
91
164
  }
92
165
  #endif
@@ -1,11 +1,11 @@
1
- fileFormatVersion: 2
2
- guid: 679059e269c44cda9044da10c5640935
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: 679059e269c44cda9044da10c5640935
3
+ MonoImporter:
4
+ externalObjects: {}
5
+ serializedVersion: 2
6
+ defaultReferences: []
7
+ executionOrder: 0
8
+ icon: {instanceID: 0}
9
+ userData:
10
+ assetBundleName:
11
+ assetBundleVariant:
@@ -1,20 +1,20 @@
1
- {
2
- "name": "WallstopStudios.DxMessaging.Reflex",
3
- "rootNamespace": "DxMessaging.Unity.Integrations.Reflex",
4
- "references": ["WallstopStudios.DxMessaging", "Reflex", "Reflex.Unity"],
5
- "includePlatforms": [],
6
- "excludePlatforms": [],
7
- "allowUnsafeCode": false,
8
- "overrideReferences": false,
9
- "precompiledReferences": [],
10
- "autoReferenced": true,
11
- "defineConstraints": ["REFLEX_PRESENT"],
12
- "versionDefines": [
13
- {
14
- "name": "com.gustavopsantos.reflex",
15
- "expression": "0.0.1",
16
- "define": "REFLEX_PRESENT"
17
- }
18
- ],
19
- "noEngineReferences": false
20
- }
1
+ {
2
+ "name": "WallstopStudios.DxMessaging.Reflex",
3
+ "rootNamespace": "DxMessaging.Unity.Integrations.Reflex",
4
+ "references": ["WallstopStudios.DxMessaging", "Reflex", "Reflex.Unity"],
5
+ "includePlatforms": [],
6
+ "excludePlatforms": [],
7
+ "allowUnsafeCode": false,
8
+ "overrideReferences": false,
9
+ "precompiledReferences": [],
10
+ "autoReferenced": true,
11
+ "defineConstraints": ["REFLEX_PRESENT"],
12
+ "versionDefines": [
13
+ {
14
+ "name": "com.gustavopsantos.reflex",
15
+ "expression": "0.0.1",
16
+ "define": "REFLEX_PRESENT"
17
+ }
18
+ ],
19
+ "noEngineReferences": false
20
+ }
@@ -1,7 +1,7 @@
1
- fileFormatVersion: 2
2
- guid: 40c54d5b9b8a421f8bdb5674af90b8db
3
- AssemblyDefinitionImporter:
4
- externalObjects: {}
5
- userData:
6
- assetBundleName:
7
- assetBundleVariant:
1
+ fileFormatVersion: 2
2
+ guid: 40c54d5b9b8a421f8bdb5674af90b8db
3
+ AssemblyDefinitionImporter:
4
+ externalObjects: {}
5
+ userData:
6
+ assetBundleName:
7
+ assetBundleVariant:
@@ -1,8 +1,8 @@
1
- fileFormatVersion: 2
2
- guid: 1f0fca97d2b2462491078c52ecc0f92a
3
- folderAsset: yes
4
- DefaultImporter:
5
- externalObjects: {}
6
- userData:
7
- assetBundleName:
8
- assetBundleVariant:
1
+ fileFormatVersion: 2
2
+ guid: 1f0fca97d2b2462491078c52ecc0f92a
3
+ folderAsset: yes
4
+ DefaultImporter:
5
+ externalObjects: {}
6
+ userData:
7
+ assetBundleName:
8
+ assetBundleVariant:
@@ -1,3 +1,11 @@
1
- fileFormatVersion: 2
2
- guid: c26d8cf1c99e45c0a847404d9a455ed1
3
- timeCreated: 1761517479
1
+ fileFormatVersion: 2
2
+ guid: c26d8cf1c99e45c0a847404d9a455ed1
3
+ MonoImporter:
4
+ externalObjects: {}
5
+ serializedVersion: 2
6
+ defaultReferences: []
7
+ executionOrder: 0
8
+ icon: {instanceID: 0}
9
+ userData:
10
+ assetBundleName:
11
+ assetBundleVariant: