com.wallstop-studios.dxmessaging 2.1.5 → 2.1.7
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/.artifacts/SourceGenerators.Tests/obj/Debug/net9.0/WallstopStudios.DxMessaging.SourceGenerators.Tests.AssemblyInfo.cs +1 -1
- package/.cspell.json +4 -1
- package/.github/workflows/actionlint.yml +11 -1
- package/.github/workflows/csharpier-autofix.yml +34 -3
- package/.github/workflows/dotnet-tests.yml +13 -0
- package/.github/workflows/format-on-demand.yml +38 -44
- package/.github/workflows/json-format-check.yml +24 -0
- package/.github/workflows/lint-doc-links.yml +13 -0
- package/.github/workflows/markdown-json.yml +21 -4
- package/.github/workflows/markdown-link-text-check.yml +10 -0
- package/.github/workflows/markdown-link-validity.yml +10 -0
- package/.github/workflows/markdownlint.yml +7 -5
- package/.github/workflows/prettier-autofix.yml +67 -11
- package/.github/workflows/release-drafter.yml +2 -2
- package/.github/workflows/sync-wiki.yml +3 -3
- package/.github/workflows/yaml-format-lint.yml +26 -0
- package/.llm/context.md +113 -3
- package/.llm/skills/documentation/changelog-management.md +38 -0
- package/.llm/skills/documentation/documentation-style-guide.md +18 -0
- package/.llm/skills/documentation/documentation-update-workflow.md +2 -0
- package/.llm/skills/documentation/documentation-updates.md +2 -0
- package/.llm/skills/documentation/markdown-compatibility.md +476 -0
- package/.llm/skills/documentation/mermaid-theming.md +326 -0
- package/.llm/skills/documentation/mkdocs-navigation.md +290 -0
- package/.llm/skills/github-actions/git-renormalize-patterns.md +231 -0
- package/.llm/skills/github-actions/workflow-consistency.md +346 -0
- package/.llm/skills/index.md +53 -27
- package/.llm/skills/scripting/javascript-code-quality.md +417 -0
- package/.llm/skills/scripting/regex-documentation.md +461 -0
- package/.llm/skills/scripting/shell-best-practices.md +55 -4
- package/.llm/skills/scripting/validation-patterns.md +418 -0
- package/.llm/skills/specification.md +4 -1
- package/.llm/skills/testing/test-code-quality.md +243 -0
- package/.llm/skills/testing/test-production-code.md +348 -0
- package/CHANGELOG.md +24 -0
- package/README.md +113 -24
- package/Tests/Runtime/Benchmarks/WallstopStudios.DxMessaging.Tests.Runtime.Benchmarks.asmdef +1 -6
- package/Tests/Runtime/Integrations/Reflex/WallstopStudios.DxMessaging.Tests.Runtime.Reflex.asmdef +1 -1
- package/Tests/Runtime/Integrations/VContainer/WallstopStudios.DxMessaging.Tests.Runtime.VContainer.asmdef +1 -1
- package/Tests/Runtime/Integrations/Zenject/WallstopStudios.DxMessaging.Tests.Runtime.Zenject.asmdef +1 -1
- package/coverage/clover.xml +216 -3
- package/coverage/clover.xml.meta +7 -7
- package/coverage/coverage-final.json +2 -1
- package/coverage/coverage-final.json.meta +7 -7
- package/coverage/lcov-report/base.css.meta +1 -1
- package/coverage/lcov-report/block-navigation.js.meta +1 -1
- package/coverage/lcov-report/favicon.png.meta +1 -1
- package/coverage/lcov-report/index.html +25 -10
- package/coverage/lcov-report/index.html.meta +7 -7
- package/coverage/lcov-report/prettify.css.meta +1 -1
- package/coverage/lcov-report/prettify.js.meta +1 -1
- package/coverage/lcov-report/sort-arrow-sprite.png.meta +1 -1
- package/coverage/lcov-report/sorter.js.meta +1 -1
- package/coverage/lcov-report/transform-docs-to-wiki.js.html +1 -1
- package/coverage/lcov-report/transform-docs-to-wiki.js.html.meta +7 -7
- package/coverage/lcov-report/vendor.meta +1 -1
- package/coverage/lcov-report.meta +8 -8
- package/coverage/lcov.info +365 -0
- package/coverage/lcov.info.meta +7 -7
- package/docs/architecture/design-and-architecture.md +0 -1
- package/docs/concepts/index.md +37 -0
- package/docs/concepts/index.md.meta +7 -0
- package/docs/concepts/interceptors-and-ordering.md +0 -2
- package/docs/concepts/mental-model.md +390 -0
- package/docs/concepts/mental-model.md.meta +7 -0
- package/docs/concepts/message-types.md +0 -1
- package/docs/getting-started/getting-started.md +1 -0
- package/docs/getting-started/index.md +6 -5
- package/docs/getting-started/overview.md +1 -0
- package/docs/getting-started/quick-start.md +2 -1
- package/docs/getting-started/visual-guide.md +4 -10
- package/docs/hooks.py +10 -1
- package/docs/images/DxMessaging-banner.svg +1 -1
- package/docs/index.md +7 -7
- package/docs/javascripts/mermaid-config.js +44 -4
- package/docs/reference/helpers.md +130 -154
- package/docs/reference/quick-reference.md +5 -1
- package/docs/reference/reference.md +124 -130
- package/mkdocs.yml +2 -0
- package/package.json +7 -2
- package/scripts/__tests__/generate-skills-index.test.js +397 -0
- package/scripts/__tests__/generate-skills-index.test.js.meta +7 -0
- package/scripts/__tests__/mermaid-config.test.js +467 -0
- package/scripts/__tests__/mermaid-config.test.js.meta +7 -0
- package/scripts/__tests__/validate-skills-optional-fields.test.js +1474 -0
- package/scripts/__tests__/validate-skills-optional-fields.test.js.meta +7 -0
- package/scripts/__tests__/validate-skills-required-fields.test.js +188 -0
- package/scripts/__tests__/validate-skills-required-fields.test.js.meta +7 -0
- package/scripts/__tests__/validate-skills-tags.test.js +353 -0
- package/scripts/__tests__/validate-skills-tags.test.js.meta +7 -0
- package/scripts/__tests__/validate-workflows.test.js +188 -0
- package/scripts/__tests__/validate-workflows.test.js.meta +7 -0
- package/scripts/generate-skills-index.js +88 -3
- package/scripts/validate-skills.js +230 -30
- package/scripts/validate-workflows.js +272 -0
- package/scripts/validate-workflows.js.meta +7 -0
- package/scripts/wiki/generate-wiki-sidebar.js.meta +1 -8
- package/scripts/wiki/transform-docs-to-wiki.js.meta +1 -1
- package/site/404.html +1 -1
- package/site/advanced/emit-shorthands/index.html +2 -2
- package/site/advanced/message-bus-providers/index.html +2 -2
- package/site/advanced/registration-builders/index.html +2 -2
- package/site/advanced/runtime-configuration/index.html +2 -2
- package/site/advanced/string-messages/index.html +2 -2
- package/site/advanced.meta +1 -1
- package/site/architecture/comparisons/index.html +2 -2
- package/site/architecture/design-and-architecture/index.html +2 -2
- package/site/architecture/performance/index.html +1 -1
- package/site/architecture.meta +1 -1
- package/site/concepts/index.html +1 -0
- package/site/concepts/index.html.meta +7 -0
- package/site/concepts/interceptors-and-ordering/index.html +4 -4
- package/site/concepts/listening-patterns/index.html +2 -2
- package/site/concepts/mental-model/index.html +146 -0
- package/site/concepts/mental-model/index.html.meta +7 -0
- package/site/concepts/mental-model.meta +8 -0
- package/site/concepts/message-types/index.html +2 -2
- package/site/concepts/targeting-and-context/index.html +2 -2
- package/site/concepts.meta +1 -1
- package/site/examples/end-to-end/index.html +2 -2
- package/site/examples/end-to-end-scene-transitions/index.html +2 -2
- package/site/examples.meta +1 -1
- package/site/getting-started/getting-started/index.html +3 -3
- package/site/getting-started/index.html +4 -4
- package/site/getting-started/install/index.html +3 -3
- package/site/getting-started/overview/index.html +2 -2
- package/site/getting-started/quick-start/index.html +2 -2
- package/site/getting-started/visual-guide/index.html +11 -11
- package/site/getting-started.meta +1 -1
- package/site/guides/advanced/index.html +2 -2
- package/site/guides/diagnostics/index.html +2 -2
- package/site/guides/migration-guide/index.html +2 -2
- package/site/guides/patterns/index.html +2 -2
- package/site/guides/testing/index.html +2 -2
- package/site/guides/unity-integration/index.html +2 -2
- package/site/guides.meta +1 -1
- package/site/hooks.py.meta +1 -1
- package/site/images/DxMessaging-banner.svg +119 -0
- package/site/images/DxMessaging-banner.svg.meta +7 -0
- package/site/images.meta +8 -0
- package/site/index.html +2 -2
- package/site/integrations/index.html +2 -2
- package/site/integrations/reflex/index.html +2 -2
- package/site/integrations/vcontainer/index.html +2 -2
- package/site/integrations/zenject/index.html +2 -2
- package/site/integrations.meta +1 -1
- package/site/javascripts/csharp-highlight.js.meta +7 -7
- package/site/javascripts/mermaid-config.js +4 -1
- package/site/javascripts/mermaid-config.js.meta +1 -1
- package/site/javascripts.meta +1 -1
- package/site/reference/compatibility/index.html +1 -1
- package/site/reference/faq/index.html +1 -1
- package/site/reference/glossary/index.html +2 -2
- package/site/reference/helpers/index.html +15 -15
- package/site/reference/quick-reference/index.html +3 -3
- package/site/reference/reference/index.html +37 -37
- package/site/reference/troubleshooting/index.html +1 -1
- package/site/reference.meta +1 -1
- package/site/search/search_index.json +1 -1
- package/site/sitemap.xml +46 -38
- package/site/sitemap.xml.gz +0 -0
- package/site/stylesheets/extra.css.meta +1 -1
- package/site/stylesheets.meta +1 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
<!doctype html><html lang=en class=no-js> <head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=description content="High-performance type-safe messaging library for Unity"><meta name=author content="Wallstop Studios"><link href=https://wallstop.github.io/DxMessaging/getting-started/visual-guide/ rel=canonical><link href=../getting-started/ rel=prev><link href=../../concepts/message-types/ rel=next><link rel=icon href=../../assets/images/favicon.png><meta name=generator content="mkdocs-1.6.1, mkdocs-material-9.7.1"><title>Visual Guide - DxMessaging Documentation</title><link rel=stylesheet href=../../assets/stylesheets/main.484c7ddc.min.css><link rel=stylesheet href=../../assets/stylesheets/palette.ab4e12ef.min.css><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=stylesheet href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback"><style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style><link rel=stylesheet href=../../css/timeago.css><link rel=stylesheet href=../../stylesheets/extra.css><script>__md_scope=new URL("../..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script></head> <body dir=ltr data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo> <input class=md-toggle data-md-toggle=drawer type=checkbox id=__drawer autocomplete=off> <input class=md-toggle data-md-toggle=search type=checkbox id=__search autocomplete=off> <label class=md-overlay for=__drawer></label> <div data-md-component=skip> <a href=#dxmessaging-visual-guide-for-beginners class=md-skip> Skip to content </a> </div> <div data-md-component=announce> </div> <header class="md-header md-header--shadow md-header--lifted" data-md-component=header> <nav class="md-header__inner md-grid" aria-label=Header> <a href=../.. title="DxMessaging Documentation" class="md-header__button md-logo" aria-label="DxMessaging Documentation" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54"/></svg> </a> <label class="md-header__button md-icon" for=__drawer> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z"/></svg> </label> <div class=md-header__title data-md-component=header-title> <div class=md-header__ellipsis> <div class=md-header__topic> <span class=md-ellipsis> DxMessaging Documentation </span> </div> <div class=md-header__topic data-md-component=header-topic> <span class=md-ellipsis> Visual Guide </span> </div> </div> </div> <form class=md-header__option data-md-component=palette> <input class=md-option data-md-color-media="(prefers-color-scheme: light)" data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo aria-label="Switch to dark mode" type=radio name=__palette id=__palette_0> <label class="md-header__button md-icon" title="Switch to dark mode" for=__palette_1 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12z"/></svg> </label> <input class=md-option data-md-color-media="(prefers-color-scheme: dark)" data-md-color-scheme=slate data-md-color-primary=indigo data-md-color-accent=indigo aria-label="Switch to light mode" type=radio name=__palette id=__palette_1> <label class="md-header__button md-icon" title="Switch to light mode" for=__palette_0 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12s-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12z"/></svg> </label> </form> <script>var palette=__md_get("__palette");if(palette&&palette.color){if("(prefers-color-scheme)"===palette.color.media){var media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']");palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent")}for(var[key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script> <label class="md-header__button md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg> </label> <div class=md-search data-md-component=search role=dialog> <label class=md-search__overlay for=__search></label> <div class=md-search__inner role=search> <form class=md-search__form name=search> <input type=text class=md-search__input name=query aria-label=Search placeholder=Search autocapitalize=off autocorrect=off autocomplete=off spellcheck=false data-md-component=search-query required> <label class="md-search__icon md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg> </label> <nav class=md-search__options aria-label=Search> <a href=javascript:void(0) class="md-search__icon md-icon" title=Share aria-label=Share data-clipboard data-clipboard-text data-md-component=search-share tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7s-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91s2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08"/></svg> </a> <button type=reset class="md-search__icon md-icon" title=Clear aria-label=Clear tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/></svg> </button> </nav> <div class=md-search__suggest data-md-component=search-suggest></div> </form> <div class=md-search__output> <div class=md-search__scrollwrap tabindex=0 data-md-scrollfix> <div class=md-search-result data-md-component=search-result> <div class=md-search-result__meta> Initializing search </div> <ol class=md-search-result__list role=presentation></ol> </div> </div> </div> </div> </div> <div class=md-header__source> <a href=https://github.com/wallstop/DxMessaging title="Go to repository" class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 512 512"><!-- Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M173.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M252.8 8C114.1 8 8 113.3 8 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C436.2 457.8 504 362.9 504 252 504 113.3 391.5 8 252.8 8M105.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2"/></svg> </div> <div class=md-source__repository> wallstop/DxMessaging </div> </a> </div> </nav> <nav class=md-tabs aria-label=Tabs data-md-component=tabs> <div class=md-grid> <ul class=md-tabs__list> <li class=md-tabs__item> <a href=../.. class=md-tabs__link> Home </a> </li> <li class="md-tabs__item md-tabs__item--active"> <a href=../ class=md-tabs__link> Getting Started </a> </li> <li class=md-tabs__item> <a href=../../concepts/message-types/ class=md-tabs__link> Concepts </a> </li> <li class=md-tabs__item> <a href=../../guides/patterns/ class=md-tabs__link> Guides </a> </li> <li class=md-tabs__item> <a href=../../architecture/design-and-architecture/ class=md-tabs__link> Architecture </a> </li> <li class=md-tabs__item> <a href=../../advanced/emit-shorthands/ class=md-tabs__link> Advanced </a> </li> <li class=md-tabs__item> <a href=../../integrations/ class=md-tabs__link> Integrations </a> </li> <li class=md-tabs__item> <a href=../../examples/end-to-end/ class=md-tabs__link> Examples </a> </li> <li class=md-tabs__item> <a href=../../reference/reference/ class=md-tabs__link> Reference </a> </li> </ul> </div> </nav> </header> <div class=md-container data-md-component=container> <main class=md-main data-md-component=main> <div class="md-main__inner md-grid"> <div class="md-sidebar md-sidebar--primary" data-md-component=sidebar data-md-type=navigation> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--primary md-nav--lifted" aria-label=Navigation data-md-level=0> <label class=md-nav__title for=__drawer> <a href=../.. title="DxMessaging Documentation" class="md-nav__button md-logo" aria-label="DxMessaging Documentation" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54"/></svg> </a> DxMessaging Documentation </label> <div class=md-nav__source> <a href=https://github.com/wallstop/DxMessaging title="Go to repository" class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 512 512"><!-- Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M173.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M252.8 8C114.1 8 8 113.3 8 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C436.2 457.8 504 362.9 504 252 504 113.3 391.5 8 252.8 8M105.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2"/></svg> </div> <div class=md-source__repository> wallstop/DxMessaging </div> </a> </div> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../.. class=md-nav__link> <span class=md-ellipsis> Home </span> </a> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_2 checked> <div class="md-nav__link md-nav__container"> <a href=../ class="md-nav__link "> <span class=md-ellipsis> Getting Started </span> </a> <label class="md-nav__link " for=__nav_2 id=__nav_2_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_2_label aria-expanded=true> <label class=md-nav__title for=__nav_2> <span class="md-nav__icon md-icon"></span> Getting Started </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../overview/ class=md-nav__link> <span class=md-ellipsis> Overview </span> </a> </li> <li class=md-nav__item> <a href=../install/ class=md-nav__link> <span class=md-ellipsis> Installation </span> </a> </li> <li class=md-nav__item> <a href=../quick-start/ class=md-nav__link> <span class=md-ellipsis> Quick Start </span> </a> </li> <li class=md-nav__item> <a href=../getting-started/ class=md-nav__link> <span class=md-ellipsis> Getting Started Guide </span> </a> </li> <li class="md-nav__item md-nav__item--active"> <input class="md-nav__toggle md-toggle" type=checkbox id=__toc> <label class="md-nav__link md-nav__link--active" for=__toc> <span class=md-ellipsis> Visual Guide </span> <span class="md-nav__icon md-icon"></span> </label> <a href=./ class="md-nav__link md-nav__link--active"> <span class=md-ellipsis> Visual Guide </span> </a> <nav class="md-nav md-nav--secondary" aria-label="Table of contents"> <label class=md-nav__title for=__toc> <span class="md-nav__icon md-icon"></span> Table of contents </label> <ul class=md-nav__list data-md-component=toc data-md-scrollfix> <li class=md-nav__item> <a href=#what-problem-does-it-solve class=md-nav__link> <span class=md-ellipsis> What Problem Does It Solve </span> </a> <nav class=md-nav aria-label="What Problem Does It Solve"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#the-old-way-spaghetti-code class=md-nav__link> <span class=md-ellipsis> The Old Way (Spaghetti Code) </span> </a> <nav class=md-nav aria-label="The Old Way (Spaghetti Code)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#problems class=md-nav__link> <span class=md-ellipsis> Problems </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#the-dxmessaging-way-clean-separation class=md-nav__link> <span class=md-ellipsis> The DxMessaging Way (Clean Separation) </span> </a> <nav class=md-nav aria-label="The DxMessaging Way (Clean Separation)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#benefits class=md-nav__link> <span class=md-ellipsis> Benefits </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#the-three-message-types-simple class=md-nav__link> <span class=md-ellipsis> The Three Message Types (Simple!) </span> </a> <nav class=md-nav aria-label="The Three Message Types (Simple!)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#1-untargeted-announcement-to-everyone class=md-nav__link> <span class=md-ellipsis> 1. Untargeted (Announcement to Everyone) </span> </a> <nav class=md-nav aria-label="1. Untargeted (Announcement to Everyone)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#real-world-uses class=md-nav__link> <span class=md-ellipsis> Real-world uses </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#2-targeted-letter-to-one-person class=md-nav__link> <span class=md-ellipsis> 2. Targeted (Letter to One Person) </span> </a> <nav class=md-nav aria-label="2. Targeted (Letter to One Person)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#real-world-uses_1 class=md-nav__link> <span class=md-ellipsis> Real-world uses </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#3-broadcast-news-from-one-source class=md-nav__link> <span class=md-ellipsis> 3. Broadcast (News from One Source) </span> </a> <nav class=md-nav aria-label="3. Broadcast (News from One Source)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#real-world-uses_2 class=md-nav__link> <span class=md-ellipsis> Real-world uses </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#the-message-journey-step-by-step class=md-nav__link> <span class=md-ellipsis> The Message Journey (Step by Step) </span> </a> <nav class=md-nav aria-label="The Message Journey (Step by Step)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#key-points class=md-nav__link> <span class=md-ellipsis> Key points </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#your-first-message-3-easy-steps class=md-nav__link> <span class=md-ellipsis> Your First Message (3 Easy Steps) </span> </a> <nav class=md-nav aria-label="Your First Message (3 Easy Steps)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#step-1-define-it class=md-nav__link> <span class=md-ellipsis> Step 1: Define It </span> </a> <nav class=md-nav aria-label="Step 1: Define It"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#what-are-those-dxsomething-tags class=md-nav__link> <span class=md-ellipsis> What are those [DxSomething] tags? </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#step-2-listen-for-it class=md-nav__link> <span class=md-ellipsis> Step 2: Listen for It </span> </a> </li> <li class=md-nav__item> <a href=#step-3-send-it class=md-nav__link> <span class=md-ellipsis> Step 3: Send It </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#common-patterns-visualized class=md-nav__link> <span class=md-ellipsis> Common Patterns Visualized </span> </a> <nav class=md-nav aria-label="Common Patterns Visualized"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#pattern-scene-transition class=md-nav__link> <span class=md-ellipsis> Pattern: Scene Transition </span> </a> </li> <li class=md-nav__item> <a href=#pattern-player-input---action class=md-nav__link> <span class=md-ellipsis> Pattern: Player Input -> Action </span> </a> </li> <li class=md-nav__item> <a href=#pattern-achievement-tracking class=md-nav__link> <span class=md-ellipsis> Pattern: Achievement Tracking </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#when-to-use-which-message-type class=md-nav__link> <span class=md-ellipsis> When to Use Which Message Type </span> </a> <nav class=md-nav aria-label="When to Use Which Message Type"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#use-untargeted-when class=md-nav__link> <span class=md-ellipsis> Use Untargeted When </span> </a> </li> <li class=md-nav__item> <a href=#use-targeted-when class=md-nav__link> <span class=md-ellipsis> Use Targeted When </span> </a> </li> <li class=md-nav__item> <a href=#use-broadcast-when class=md-nav__link> <span class=md-ellipsis> Use Broadcast When </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#mental-model-restaurant-analogy class=md-nav__link> <span class=md-ellipsis> Mental Model: Restaurant Analogy </span> </a> <nav class=md-nav aria-label="Mental Model: Restaurant Analogy"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#untargeted--restaurant-announcement class=md-nav__link> <span class=md-ellipsis> Untargeted = Restaurant Announcement </span> </a> </li> <li class=md-nav__item> <a href=#targeted--waiter-delivering-food class=md-nav__link> <span class=md-ellipsis> Targeted = Waiter Delivering Food </span> </a> </li> <li class=md-nav__item> <a href=#broadcast--customer-calling-waiter class=md-nav__link> <span class=md-ellipsis> Broadcast = Customer Calling Waiter </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#debugging-visualized class=md-nav__link> <span class=md-ellipsis> Debugging Visualized </span> </a> <nav class=md-nav aria-label="Debugging Visualized"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#messagingcomponent-inspector class=md-nav__link> <span class=md-ellipsis> MessagingComponent Inspector </span> </a> <nav class=md-nav aria-label="MessagingComponent Inspector"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#message-history-last-10 class=md-nav__link> <span class=md-ellipsis> Message History (last 10) </span> </a> <nav class=md-nav aria-label="Message History (last 10)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#registrations class=md-nav__link> <span class=md-ellipsis> Registrations </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#performance-at-a-glance class=md-nav__link> <span class=md-ellipsis> Performance at a Glance </span> </a> </li> <li class=md-nav__item> <a href=#learning-path class=md-nav__link> <span class=md-ellipsis> Learning Path </span> </a> </li> <li class=md-nav__item> <a href=#common-beginner-questions class=md-nav__link> <span class=md-ellipsis> Common Beginner Questions </span> </a> <nav class=md-nav aria-label="Common Beginner Questions"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#do-i-always-need-messageawarecomponent class=md-nav__link> <span class=md-ellipsis> "Do I always need MessageAwareComponent?" </span> </a> </li> <li class=md-nav__item> <a href=#can-i-send-a-message-to-multiple-targets class=md-nav__link> <span class=md-ellipsis> "Can I send a message to multiple targets?" </span> </a> <nav class=md-nav aria-label='"Can I send a message to multiple targets?"'> <ul class=md-nav__list> <li class=md-nav__item> <a href=#instead-use class=md-nav__link> <span class=md-ellipsis> Instead, use </span> </a> <nav class=md-nav aria-label="Instead, use"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#example class=md-nav__link> <span class=md-ellipsis> Example </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#what-if-i-forget-to-unsubscribe class=md-nav__link> <span class=md-ellipsis> "What if I forget to unsubscribe?" </span> </a> <nav class=md-nav aria-label='"What if I forget to unsubscribe?"'> <ul class=md-nav__list> <li class=md-nav__item> <a href=#the-system-handles-cleanup-automatically class=md-nav__link> <span class=md-ellipsis> The system handles cleanup automatically </span> </a> </li> <li class=md-nav__item> <a href=#old-way-easy-to-forget class=md-nav__link> <span class=md-ellipsis> Old way (easy to forget) </span> </a> <nav class=md-nav aria-label="Old way (easy to forget)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#dxmessaging-way-automatic-management class=md-nav__link> <span class=md-ellipsis> DxMessaging way (automatic management) </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#is-it-slower-than-regular-events class=md-nav__link> <span class=md-ellipsis> "Is it slower than regular events?" </span> </a> <nav class=md-nav aria-label='"Is it slower than regular events?"'> <ul class=md-nav__list> <li class=md-nav__item> <a href=#benchmark-comparison class=md-nav__link> <span class=md-ellipsis> Benchmark comparison </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#can-i-cancel-a-message class=md-nav__link> <span class=md-ellipsis> "Can I cancel a message?" </span> </a> <nav class=md-nav aria-label='"Can I cancel a message?"'> <ul class=md-nav__list> <li class=md-nav__item> <a href=#yes-thats-what-interceptors-are-for class=md-nav__link> <span class=md-ellipsis> Yes! That's what interceptors are for </span> </a> <nav class=md-nav aria-label="Yes! That's what interceptors are for"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#real-world-uses_3 class=md-nav__link> <span class=md-ellipsis> Real-world uses </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#can-i-see-what-messages-are-firing class=md-nav__link> <span class=md-ellipsis> "Can I see what messages are firing?" </span> </a> <nav class=md-nav aria-label='"Can I see what messages are firing?"'> <ul class=md-nav__list> <li class=md-nav__item> <a href=#yes-open-any-component-in-the-inspector-and-scroll-down class=md-nav__link> <span class=md-ellipsis> Yes! Open any component in the Inspector and scroll down </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#quick-checklist-am-i-doing-it-right class=md-nav__link> <span class=md-ellipsis> Quick Checklist: Am I Doing It Right </span> </a> </li> <li class=md-nav__item> <a href=#next-steps class=md-nav__link> <span class=md-ellipsis> Next Steps </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type=checkbox id=__nav_3> <label class=md-nav__link for=__nav_3 id=__nav_3_label tabindex=0> <span class=md-ellipsis> Concepts </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3> <span class="md-nav__icon md-icon"></span> Concepts </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../concepts/message-types/ class=md-nav__link> <span class=md-ellipsis> Message Types </span> </a> </li> <li class=md-nav__item> <a href=../../concepts/listening-patterns/ class=md-nav__link> <span class=md-ellipsis> Listening Patterns </span> </a> </li> <li class=md-nav__item> <a href=../../concepts/targeting-and-context/ class=md-nav__link> <span class=md-ellipsis> Targeting & Context </span> </a> </li> <li class=md-nav__item> <a href=../../concepts/interceptors-and-ordering/ class=md-nav__link> <span class=md-ellipsis> Interceptors & Ordering </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type=checkbox id=__nav_4> <label class=md-nav__link for=__nav_4 id=__nav_4_label tabindex=0> <span class=md-ellipsis> Guides </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4> <span class="md-nav__icon md-icon"></span> Guides </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../guides/patterns/ class=md-nav__link> <span class=md-ellipsis> Patterns </span> </a> </li> <li class=md-nav__item> <a href=../../guides/unity-integration/ class=md-nav__link> <span class=md-ellipsis> Unity Integration </span> </a> </li> <li class=md-nav__item> <a href=../../guides/testing/ class=md-nav__link> <span class=md-ellipsis> Testing </span> </a> </li> <li class=md-nav__item> <a href=../../guides/diagnostics/ class=md-nav__link> <span class=md-ellipsis> Diagnostics </span> </a> </li> <li class=md-nav__item> <a href=../../guides/advanced/ class=md-nav__link> <span class=md-ellipsis> Advanced Topics </span> </a> </li> <li class=md-nav__item> <a href=../../guides/migration-guide/ class=md-nav__link> <span class=md-ellipsis> Migration Guide </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type=checkbox id=__nav_5> <label class=md-nav__link for=__nav_5 id=__nav_5_label tabindex=0> <span class=md-ellipsis> Architecture </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_5_label aria-expanded=false> <label class=md-nav__title for=__nav_5> <span class="md-nav__icon md-icon"></span> Architecture </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../architecture/design-and-architecture/ class=md-nav__link> <span class=md-ellipsis> Design & Architecture </span> </a> </li> <li class=md-nav__item> <a href=../../architecture/comparisons/ class=md-nav__link> <span class=md-ellipsis> Comparisons </span> </a> </li> <li class=md-nav__item> <a href=../../architecture/performance/ class=md-nav__link> <span class=md-ellipsis> Performance </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type=checkbox id=__nav_6> <label class=md-nav__link for=__nav_6 id=__nav_6_label tabindex=0> <span class=md-ellipsis> Advanced </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_6_label aria-expanded=false> <label class=md-nav__title for=__nav_6> <span class="md-nav__icon md-icon"></span> Advanced </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../advanced/emit-shorthands/ class=md-nav__link> <span class=md-ellipsis> Emit Shorthands </span> </a> </li> <li class=md-nav__item> <a href=../../advanced/message-bus-providers/ class=md-nav__link> <span class=md-ellipsis> Message Bus Providers </span> </a> </li> <li class=md-nav__item> <a href=../../advanced/registration-builders/ class=md-nav__link> <span class=md-ellipsis> Registration Builders </span> </a> </li> <li class=md-nav__item> <a href=../../advanced/runtime-configuration/ class=md-nav__link> <span class=md-ellipsis> Runtime Configuration </span> </a> </li> <li class=md-nav__item> <a href=../../advanced/string-messages/ class=md-nav__link> <span class=md-ellipsis> String Messages </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type=checkbox id=__nav_7> <div class="md-nav__link md-nav__container"> <a href=../../integrations/ class="md-nav__link "> <span class=md-ellipsis> Integrations </span> </a> <label class="md-nav__link " for=__nav_7 id=__nav_7_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_7_label aria-expanded=false> <label class=md-nav__title for=__nav_7> <span class="md-nav__icon md-icon"></span> Integrations </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../integrations/vcontainer/ class=md-nav__link> <span class=md-ellipsis> VContainer </span> </a> </li> <li class=md-nav__item> <a href=../../integrations/zenject/ class=md-nav__link> <span class=md-ellipsis> Zenject </span> </a> </li> <li class=md-nav__item> <a href=../../integrations/reflex/ class=md-nav__link> <span class=md-ellipsis> Reflex </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type=checkbox id=__nav_8> <label class=md-nav__link for=__nav_8 id=__nav_8_label tabindex=0> <span class=md-ellipsis> Examples </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_8_label aria-expanded=false> <label class=md-nav__title for=__nav_8> <span class="md-nav__icon md-icon"></span> Examples </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../examples/end-to-end/ class=md-nav__link> <span class=md-ellipsis> End-to-End </span> </a> </li> <li class=md-nav__item> <a href=../../examples/end-to-end-scene-transitions/ class=md-nav__link> <span class=md-ellipsis> Scene Transitions </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type=checkbox id=__nav_9> <label class=md-nav__link for=__nav_9 id=__nav_9_label tabindex=0> <span class=md-ellipsis> Reference </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_9_label aria-expanded=false> <label class=md-nav__title for=__nav_9> <span class="md-nav__icon md-icon"></span> Reference </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../reference/reference/ class=md-nav__link> <span class=md-ellipsis> API Reference (Practical) </span> </a> </li> <li class=md-nav__item> <a href=../../reference/quick-reference/ class=md-nav__link> <span class=md-ellipsis> Quick Reference </span> </a> </li> <li class=md-nav__item> <a href=../../reference/helpers/ class=md-nav__link> <span class=md-ellipsis> Helpers </span> </a> </li> <li class=md-nav__item> <a href=../../reference/faq/ class=md-nav__link> <span class=md-ellipsis> FAQ </span> </a> </li> <li class=md-nav__item> <a href=../../reference/glossary/ class=md-nav__link> <span class=md-ellipsis> Glossary </span> </a> </li> <li class=md-nav__item> <a href=../../reference/troubleshooting/ class=md-nav__link> <span class=md-ellipsis> Troubleshooting </span> </a> </li> <li class=md-nav__item> <a href=../../reference/compatibility/ class=md-nav__link> <span class=md-ellipsis> Compatibility </span> </a> </li> </ul> </nav> </li> </ul> </nav> </div> </div> </div> <div class="md-sidebar md-sidebar--secondary" data-md-component=sidebar data-md-type=toc> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--secondary" aria-label="Table of contents"> <label class=md-nav__title for=__toc> <span class="md-nav__icon md-icon"></span> Table of contents </label> <ul class=md-nav__list data-md-component=toc data-md-scrollfix> <li class=md-nav__item> <a href=#what-problem-does-it-solve class=md-nav__link> <span class=md-ellipsis> What Problem Does It Solve </span> </a> <nav class=md-nav aria-label="What Problem Does It Solve"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#the-old-way-spaghetti-code class=md-nav__link> <span class=md-ellipsis> The Old Way (Spaghetti Code) </span> </a> <nav class=md-nav aria-label="The Old Way (Spaghetti Code)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#problems class=md-nav__link> <span class=md-ellipsis> Problems </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#the-dxmessaging-way-clean-separation class=md-nav__link> <span class=md-ellipsis> The DxMessaging Way (Clean Separation) </span> </a> <nav class=md-nav aria-label="The DxMessaging Way (Clean Separation)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#benefits class=md-nav__link> <span class=md-ellipsis> Benefits </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#the-three-message-types-simple class=md-nav__link> <span class=md-ellipsis> The Three Message Types (Simple!) </span> </a> <nav class=md-nav aria-label="The Three Message Types (Simple!)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#1-untargeted-announcement-to-everyone class=md-nav__link> <span class=md-ellipsis> 1. Untargeted (Announcement to Everyone) </span> </a> <nav class=md-nav aria-label="1. Untargeted (Announcement to Everyone)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#real-world-uses class=md-nav__link> <span class=md-ellipsis> Real-world uses </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#2-targeted-letter-to-one-person class=md-nav__link> <span class=md-ellipsis> 2. Targeted (Letter to One Person) </span> </a> <nav class=md-nav aria-label="2. Targeted (Letter to One Person)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#real-world-uses_1 class=md-nav__link> <span class=md-ellipsis> Real-world uses </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#3-broadcast-news-from-one-source class=md-nav__link> <span class=md-ellipsis> 3. Broadcast (News from One Source) </span> </a> <nav class=md-nav aria-label="3. Broadcast (News from One Source)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#real-world-uses_2 class=md-nav__link> <span class=md-ellipsis> Real-world uses </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#the-message-journey-step-by-step class=md-nav__link> <span class=md-ellipsis> The Message Journey (Step by Step) </span> </a> <nav class=md-nav aria-label="The Message Journey (Step by Step)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#key-points class=md-nav__link> <span class=md-ellipsis> Key points </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#your-first-message-3-easy-steps class=md-nav__link> <span class=md-ellipsis> Your First Message (3 Easy Steps) </span> </a> <nav class=md-nav aria-label="Your First Message (3 Easy Steps)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#step-1-define-it class=md-nav__link> <span class=md-ellipsis> Step 1: Define It </span> </a> <nav class=md-nav aria-label="Step 1: Define It"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#what-are-those-dxsomething-tags class=md-nav__link> <span class=md-ellipsis> What are those [DxSomething] tags? </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#step-2-listen-for-it class=md-nav__link> <span class=md-ellipsis> Step 2: Listen for It </span> </a> </li> <li class=md-nav__item> <a href=#step-3-send-it class=md-nav__link> <span class=md-ellipsis> Step 3: Send It </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#common-patterns-visualized class=md-nav__link> <span class=md-ellipsis> Common Patterns Visualized </span> </a> <nav class=md-nav aria-label="Common Patterns Visualized"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#pattern-scene-transition class=md-nav__link> <span class=md-ellipsis> Pattern: Scene Transition </span> </a> </li> <li class=md-nav__item> <a href=#pattern-player-input---action class=md-nav__link> <span class=md-ellipsis> Pattern: Player Input -> Action </span> </a> </li> <li class=md-nav__item> <a href=#pattern-achievement-tracking class=md-nav__link> <span class=md-ellipsis> Pattern: Achievement Tracking </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#when-to-use-which-message-type class=md-nav__link> <span class=md-ellipsis> When to Use Which Message Type </span> </a> <nav class=md-nav aria-label="When to Use Which Message Type"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#use-untargeted-when class=md-nav__link> <span class=md-ellipsis> Use Untargeted When </span> </a> </li> <li class=md-nav__item> <a href=#use-targeted-when class=md-nav__link> <span class=md-ellipsis> Use Targeted When </span> </a> </li> <li class=md-nav__item> <a href=#use-broadcast-when class=md-nav__link> <span class=md-ellipsis> Use Broadcast When </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#mental-model-restaurant-analogy class=md-nav__link> <span class=md-ellipsis> Mental Model: Restaurant Analogy </span> </a> <nav class=md-nav aria-label="Mental Model: Restaurant Analogy"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#untargeted--restaurant-announcement class=md-nav__link> <span class=md-ellipsis> Untargeted = Restaurant Announcement </span> </a> </li> <li class=md-nav__item> <a href=#targeted--waiter-delivering-food class=md-nav__link> <span class=md-ellipsis> Targeted = Waiter Delivering Food </span> </a> </li> <li class=md-nav__item> <a href=#broadcast--customer-calling-waiter class=md-nav__link> <span class=md-ellipsis> Broadcast = Customer Calling Waiter </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#debugging-visualized class=md-nav__link> <span class=md-ellipsis> Debugging Visualized </span> </a> <nav class=md-nav aria-label="Debugging Visualized"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#messagingcomponent-inspector class=md-nav__link> <span class=md-ellipsis> MessagingComponent Inspector </span> </a> <nav class=md-nav aria-label="MessagingComponent Inspector"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#message-history-last-10 class=md-nav__link> <span class=md-ellipsis> Message History (last 10) </span> </a> <nav class=md-nav aria-label="Message History (last 10)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#registrations class=md-nav__link> <span class=md-ellipsis> Registrations </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#performance-at-a-glance class=md-nav__link> <span class=md-ellipsis> Performance at a Glance </span> </a> </li> <li class=md-nav__item> <a href=#learning-path class=md-nav__link> <span class=md-ellipsis> Learning Path </span> </a> </li> <li class=md-nav__item> <a href=#common-beginner-questions class=md-nav__link> <span class=md-ellipsis> Common Beginner Questions </span> </a> <nav class=md-nav aria-label="Common Beginner Questions"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#do-i-always-need-messageawarecomponent class=md-nav__link> <span class=md-ellipsis> "Do I always need MessageAwareComponent?" </span> </a> </li> <li class=md-nav__item> <a href=#can-i-send-a-message-to-multiple-targets class=md-nav__link> <span class=md-ellipsis> "Can I send a message to multiple targets?" </span> </a> <nav class=md-nav aria-label='"Can I send a message to multiple targets?"'> <ul class=md-nav__list> <li class=md-nav__item> <a href=#instead-use class=md-nav__link> <span class=md-ellipsis> Instead, use </span> </a> <nav class=md-nav aria-label="Instead, use"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#example class=md-nav__link> <span class=md-ellipsis> Example </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#what-if-i-forget-to-unsubscribe class=md-nav__link> <span class=md-ellipsis> "What if I forget to unsubscribe?" </span> </a> <nav class=md-nav aria-label='"What if I forget to unsubscribe?"'> <ul class=md-nav__list> <li class=md-nav__item> <a href=#the-system-handles-cleanup-automatically class=md-nav__link> <span class=md-ellipsis> The system handles cleanup automatically </span> </a> </li> <li class=md-nav__item> <a href=#old-way-easy-to-forget class=md-nav__link> <span class=md-ellipsis> Old way (easy to forget) </span> </a> <nav class=md-nav aria-label="Old way (easy to forget)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#dxmessaging-way-automatic-management class=md-nav__link> <span class=md-ellipsis> DxMessaging way (automatic management) </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#is-it-slower-than-regular-events class=md-nav__link> <span class=md-ellipsis> "Is it slower than regular events?" </span> </a> <nav class=md-nav aria-label='"Is it slower than regular events?"'> <ul class=md-nav__list> <li class=md-nav__item> <a href=#benchmark-comparison class=md-nav__link> <span class=md-ellipsis> Benchmark comparison </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#can-i-cancel-a-message class=md-nav__link> <span class=md-ellipsis> "Can I cancel a message?" </span> </a> <nav class=md-nav aria-label='"Can I cancel a message?"'> <ul class=md-nav__list> <li class=md-nav__item> <a href=#yes-thats-what-interceptors-are-for class=md-nav__link> <span class=md-ellipsis> Yes! That's what interceptors are for </span> </a> <nav class=md-nav aria-label="Yes! That's what interceptors are for"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#real-world-uses_3 class=md-nav__link> <span class=md-ellipsis> Real-world uses </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#can-i-see-what-messages-are-firing class=md-nav__link> <span class=md-ellipsis> "Can I see what messages are firing?" </span> </a> <nav class=md-nav aria-label='"Can I see what messages are firing?"'> <ul class=md-nav__list> <li class=md-nav__item> <a href=#yes-open-any-component-in-the-inspector-and-scroll-down class=md-nav__link> <span class=md-ellipsis> Yes! Open any component in the Inspector and scroll down </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#quick-checklist-am-i-doing-it-right class=md-nav__link> <span class=md-ellipsis> Quick Checklist: Am I Doing It Right </span> </a> </li> <li class=md-nav__item> <a href=#next-steps class=md-nav__link> <span class=md-ellipsis> Next Steps </span> </a> </li> </ul> </nav> </div> </div> </div> <div class=md-content data-md-component=content> <nav class=md-path aria-label=Navigation> <ol class=md-path__list> <li class=md-path__item> <a href=../.. class=md-path__link> <span class=md-ellipsis> Home </span> </a> </li> <li class=md-path__item> <a href=../ class=md-path__link> <span class=md-ellipsis> Getting Started </span> </a> </li> </ol> </nav> <article class="md-content__inner md-typeset"> <a href=https://github.com/wallstop/DxMessaging/edit/master/docs/getting-started/visual-guide.md title="Edit this page" class="md-content__button md-icon" rel=edit> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M10 20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4zm10.2-7c.1 0 .3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1 23H12v-2.1l6.1-6.1z"/></svg> </a> <a href=https://github.com/wallstop/DxMessaging/raw/master/docs/getting-started/visual-guide.md title="View source of this page" class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M17 18c.56 0 1 .44 1 1s-.44 1-1 1-1-.44-1-1 .44-1 1-1m0-3c-2.73 0-5.06 1.66-6 4 .94 2.34 3.27 4 6 4s5.06-1.66 6-4c-.94-2.34-3.27-4-6-4m0 6.5a2.5 2.5 0 0 1-2.5-2.5 2.5 2.5 0 0 1 2.5-2.5 2.5 2.5 0 0 1 2.5 2.5 2.5 2.5 0 0 1-2.5 2.5M9.27 20H6V4h7v5h5v4.07c.7.08 1.36.25 2 .49V8l-6-6H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h4.5a8.2 8.2 0 0 1-1.23-2"/></svg> </a> <h1 id=dxmessaging-visual-guide-for-beginners>DxMessaging Visual Guide for Beginners<a class=headerlink href=#dxmessaging-visual-guide-for-beginners title="Anchor link to this section">¶</a></h1> <p>If you're brand new to messaging systems, this visual guide will help you understand DxMessaging in minutes.</p> <h2 id=what-problem-does-it-solve>What Problem Does It Solve<a class=headerlink href=#what-problem-does-it-solve title="Anchor link to this section">¶</a></h2> <h3 id=the-old-way-spaghetti-code>The Old Way (Spaghetti Code)<a class=headerlink href=#the-old-way-spaghetti-code title="Anchor link to this section">¶</a></h3> <pre class=mermaid><code>%%{init: {'theme': 'neutral'}}%%
|
|
2
|
-
|
|
1
|
+
<!doctype html><html lang=en class=no-js> <head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=description content="High-performance type-safe messaging library for Unity"><meta name=author content="Wallstop Studios"><link href=https://wallstop.github.io/DxMessaging/getting-started/visual-guide/ rel=canonical><link href=../getting-started/ rel=prev><link href=../../concepts/ rel=next><link rel=icon href=../../assets/images/favicon.png><meta name=generator content="mkdocs-1.6.1, mkdocs-material-9.7.1"><title>Visual Guide - DxMessaging Documentation</title><link rel=stylesheet href=../../assets/stylesheets/main.484c7ddc.min.css><link rel=stylesheet href=../../assets/stylesheets/palette.ab4e12ef.min.css><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=stylesheet href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback"><style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style><link rel=stylesheet href=../../css/timeago.css><link rel=stylesheet href=../../stylesheets/extra.css><script>__md_scope=new URL("../..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script></head> <body dir=ltr data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo> <input class=md-toggle data-md-toggle=drawer type=checkbox id=__drawer autocomplete=off> <input class=md-toggle data-md-toggle=search type=checkbox id=__search autocomplete=off> <label class=md-overlay for=__drawer></label> <div data-md-component=skip> <a href=#dxmessaging-visual-guide-for-beginners class=md-skip> Skip to content </a> </div> <div data-md-component=announce> </div> <header class="md-header md-header--shadow md-header--lifted" data-md-component=header> <nav class="md-header__inner md-grid" aria-label=Header> <a href=../.. title="DxMessaging Documentation" class="md-header__button md-logo" aria-label="DxMessaging Documentation" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54"/></svg> </a> <label class="md-header__button md-icon" for=__drawer> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z"/></svg> </label> <div class=md-header__title data-md-component=header-title> <div class=md-header__ellipsis> <div class=md-header__topic> <span class=md-ellipsis> DxMessaging Documentation </span> </div> <div class=md-header__topic data-md-component=header-topic> <span class=md-ellipsis> Visual Guide </span> </div> </div> </div> <form class=md-header__option data-md-component=palette> <input class=md-option data-md-color-media="(prefers-color-scheme: light)" data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo aria-label="Switch to dark mode" type=radio name=__palette id=__palette_0> <label class="md-header__button md-icon" title="Switch to dark mode" for=__palette_1 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12z"/></svg> </label> <input class=md-option data-md-color-media="(prefers-color-scheme: dark)" data-md-color-scheme=slate data-md-color-primary=indigo data-md-color-accent=indigo aria-label="Switch to light mode" type=radio name=__palette id=__palette_1> <label class="md-header__button md-icon" title="Switch to light mode" for=__palette_0 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12s-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12z"/></svg> </label> </form> <script>var palette=__md_get("__palette");if(palette&&palette.color){if("(prefers-color-scheme)"===palette.color.media){var media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']");palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent")}for(var[key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script> <label class="md-header__button md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg> </label> <div class=md-search data-md-component=search role=dialog> <label class=md-search__overlay for=__search></label> <div class=md-search__inner role=search> <form class=md-search__form name=search> <input type=text class=md-search__input name=query aria-label=Search placeholder=Search autocapitalize=off autocorrect=off autocomplete=off spellcheck=false data-md-component=search-query required> <label class="md-search__icon md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg> </label> <nav class=md-search__options aria-label=Search> <a href=javascript:void(0) class="md-search__icon md-icon" title=Share aria-label=Share data-clipboard data-clipboard-text data-md-component=search-share tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7s-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91s2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08"/></svg> </a> <button type=reset class="md-search__icon md-icon" title=Clear aria-label=Clear tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/></svg> </button> </nav> <div class=md-search__suggest data-md-component=search-suggest></div> </form> <div class=md-search__output> <div class=md-search__scrollwrap tabindex=0 data-md-scrollfix> <div class=md-search-result data-md-component=search-result> <div class=md-search-result__meta> Initializing search </div> <ol class=md-search-result__list role=presentation></ol> </div> </div> </div> </div> </div> <div class=md-header__source> <a href=https://github.com/wallstop/DxMessaging title="Go to repository" class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 512 512"><!-- Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M173.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M252.8 8C114.1 8 8 113.3 8 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C436.2 457.8 504 362.9 504 252 504 113.3 391.5 8 252.8 8M105.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2"/></svg> </div> <div class=md-source__repository> wallstop/DxMessaging </div> </a> </div> </nav> <nav class=md-tabs aria-label=Tabs data-md-component=tabs> <div class=md-grid> <ul class=md-tabs__list> <li class=md-tabs__item> <a href=../.. class=md-tabs__link> Home </a> </li> <li class="md-tabs__item md-tabs__item--active"> <a href=../ class=md-tabs__link> Getting Started </a> </li> <li class=md-tabs__item> <a href=../../concepts/ class=md-tabs__link> Concepts </a> </li> <li class=md-tabs__item> <a href=../../guides/patterns/ class=md-tabs__link> Guides </a> </li> <li class=md-tabs__item> <a href=../../architecture/design-and-architecture/ class=md-tabs__link> Architecture </a> </li> <li class=md-tabs__item> <a href=../../advanced/emit-shorthands/ class=md-tabs__link> Advanced </a> </li> <li class=md-tabs__item> <a href=../../integrations/ class=md-tabs__link> Integrations </a> </li> <li class=md-tabs__item> <a href=../../examples/end-to-end/ class=md-tabs__link> Examples </a> </li> <li class=md-tabs__item> <a href=../../reference/reference/ class=md-tabs__link> Reference </a> </li> </ul> </div> </nav> </header> <div class=md-container data-md-component=container> <main class=md-main data-md-component=main> <div class="md-main__inner md-grid"> <div class="md-sidebar md-sidebar--primary" data-md-component=sidebar data-md-type=navigation> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--primary md-nav--lifted" aria-label=Navigation data-md-level=0> <label class=md-nav__title for=__drawer> <a href=../.. title="DxMessaging Documentation" class="md-nav__button md-logo" aria-label="DxMessaging Documentation" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54"/></svg> </a> DxMessaging Documentation </label> <div class=md-nav__source> <a href=https://github.com/wallstop/DxMessaging title="Go to repository" class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 512 512"><!-- Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M173.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M252.8 8C114.1 8 8 113.3 8 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C436.2 457.8 504 362.9 504 252 504 113.3 391.5 8 252.8 8M105.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2"/></svg> </div> <div class=md-source__repository> wallstop/DxMessaging </div> </a> </div> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../.. class=md-nav__link> <span class=md-ellipsis> Home </span> </a> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_2 checked> <div class="md-nav__link md-nav__container"> <a href=../ class="md-nav__link "> <span class=md-ellipsis> Getting Started </span> </a> <label class="md-nav__link " for=__nav_2 id=__nav_2_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_2_label aria-expanded=true> <label class=md-nav__title for=__nav_2> <span class="md-nav__icon md-icon"></span> Getting Started </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../overview/ class=md-nav__link> <span class=md-ellipsis> Overview </span> </a> </li> <li class=md-nav__item> <a href=../install/ class=md-nav__link> <span class=md-ellipsis> Installation </span> </a> </li> <li class=md-nav__item> <a href=../quick-start/ class=md-nav__link> <span class=md-ellipsis> Quick Start </span> </a> </li> <li class=md-nav__item> <a href=../getting-started/ class=md-nav__link> <span class=md-ellipsis> Getting Started Guide </span> </a> </li> <li class="md-nav__item md-nav__item--active"> <input class="md-nav__toggle md-toggle" type=checkbox id=__toc> <label class="md-nav__link md-nav__link--active" for=__toc> <span class=md-ellipsis> Visual Guide </span> <span class="md-nav__icon md-icon"></span> </label> <a href=./ class="md-nav__link md-nav__link--active"> <span class=md-ellipsis> Visual Guide </span> </a> <nav class="md-nav md-nav--secondary" aria-label="Table of contents"> <label class=md-nav__title for=__toc> <span class="md-nav__icon md-icon"></span> Table of contents </label> <ul class=md-nav__list data-md-component=toc data-md-scrollfix> <li class=md-nav__item> <a href=#what-problem-does-it-solve class=md-nav__link> <span class=md-ellipsis> What Problem Does It Solve </span> </a> <nav class=md-nav aria-label="What Problem Does It Solve"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#the-old-way-spaghetti-code class=md-nav__link> <span class=md-ellipsis> The Old Way (Spaghetti Code) </span> </a> <nav class=md-nav aria-label="The Old Way (Spaghetti Code)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#problems class=md-nav__link> <span class=md-ellipsis> Problems </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#the-dxmessaging-way-clean-separation class=md-nav__link> <span class=md-ellipsis> The DxMessaging Way (Clean Separation) </span> </a> <nav class=md-nav aria-label="The DxMessaging Way (Clean Separation)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#benefits class=md-nav__link> <span class=md-ellipsis> Benefits </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#the-three-message-types-simple class=md-nav__link> <span class=md-ellipsis> The Three Message Types (Simple!) </span> </a> <nav class=md-nav aria-label="The Three Message Types (Simple!)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#1-untargeted-announcement-to-everyone class=md-nav__link> <span class=md-ellipsis> 1. Untargeted (Announcement to Everyone) </span> </a> <nav class=md-nav aria-label="1. Untargeted (Announcement to Everyone)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#real-world-uses class=md-nav__link> <span class=md-ellipsis> Real-world uses </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#2-targeted-letter-to-one-person class=md-nav__link> <span class=md-ellipsis> 2. Targeted (Letter to One Person) </span> </a> <nav class=md-nav aria-label="2. Targeted (Letter to One Person)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#real-world-uses_1 class=md-nav__link> <span class=md-ellipsis> Real-world uses </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#3-broadcast-news-from-one-source class=md-nav__link> <span class=md-ellipsis> 3. Broadcast (News from One Source) </span> </a> <nav class=md-nav aria-label="3. Broadcast (News from One Source)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#real-world-uses_2 class=md-nav__link> <span class=md-ellipsis> Real-world uses </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#the-message-journey-step-by-step class=md-nav__link> <span class=md-ellipsis> The Message Journey (Step by Step) </span> </a> <nav class=md-nav aria-label="The Message Journey (Step by Step)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#key-points class=md-nav__link> <span class=md-ellipsis> Key points </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#your-first-message-3-easy-steps class=md-nav__link> <span class=md-ellipsis> Your First Message (3 Easy Steps) </span> </a> <nav class=md-nav aria-label="Your First Message (3 Easy Steps)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#step-1-define-it class=md-nav__link> <span class=md-ellipsis> Step 1: Define It </span> </a> <nav class=md-nav aria-label="Step 1: Define It"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#what-are-those-dxsomething-tags class=md-nav__link> <span class=md-ellipsis> What are those [DxSomething] tags? </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#step-2-listen-for-it class=md-nav__link> <span class=md-ellipsis> Step 2: Listen for It </span> </a> </li> <li class=md-nav__item> <a href=#step-3-send-it class=md-nav__link> <span class=md-ellipsis> Step 3: Send It </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#common-patterns-visualized class=md-nav__link> <span class=md-ellipsis> Common Patterns Visualized </span> </a> <nav class=md-nav aria-label="Common Patterns Visualized"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#pattern-scene-transition class=md-nav__link> <span class=md-ellipsis> Pattern: Scene Transition </span> </a> </li> <li class=md-nav__item> <a href=#pattern-player-input---action class=md-nav__link> <span class=md-ellipsis> Pattern: Player Input -> Action </span> </a> </li> <li class=md-nav__item> <a href=#pattern-achievement-tracking class=md-nav__link> <span class=md-ellipsis> Pattern: Achievement Tracking </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#when-to-use-which-message-type class=md-nav__link> <span class=md-ellipsis> When to Use Which Message Type </span> </a> <nav class=md-nav aria-label="When to Use Which Message Type"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#use-untargeted-when class=md-nav__link> <span class=md-ellipsis> Use Untargeted When </span> </a> </li> <li class=md-nav__item> <a href=#use-targeted-when class=md-nav__link> <span class=md-ellipsis> Use Targeted When </span> </a> </li> <li class=md-nav__item> <a href=#use-broadcast-when class=md-nav__link> <span class=md-ellipsis> Use Broadcast When </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#mental-model-restaurant-analogy class=md-nav__link> <span class=md-ellipsis> Mental Model: Restaurant Analogy </span> </a> <nav class=md-nav aria-label="Mental Model: Restaurant Analogy"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#untargeted--restaurant-announcement class=md-nav__link> <span class=md-ellipsis> Untargeted = Restaurant Announcement </span> </a> </li> <li class=md-nav__item> <a href=#targeted--waiter-delivering-food class=md-nav__link> <span class=md-ellipsis> Targeted = Waiter Delivering Food </span> </a> </li> <li class=md-nav__item> <a href=#broadcast--customer-calling-waiter class=md-nav__link> <span class=md-ellipsis> Broadcast = Customer Calling Waiter </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#debugging-visualized class=md-nav__link> <span class=md-ellipsis> Debugging Visualized </span> </a> <nav class=md-nav aria-label="Debugging Visualized"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#messagingcomponent-inspector class=md-nav__link> <span class=md-ellipsis> MessagingComponent Inspector </span> </a> <nav class=md-nav aria-label="MessagingComponent Inspector"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#message-history-last-10 class=md-nav__link> <span class=md-ellipsis> Message History (last 10) </span> </a> <nav class=md-nav aria-label="Message History (last 10)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#registrations class=md-nav__link> <span class=md-ellipsis> Registrations </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#performance-at-a-glance class=md-nav__link> <span class=md-ellipsis> Performance at a Glance </span> </a> </li> <li class=md-nav__item> <a href=#learning-path class=md-nav__link> <span class=md-ellipsis> Learning Path </span> </a> </li> <li class=md-nav__item> <a href=#common-beginner-questions class=md-nav__link> <span class=md-ellipsis> Common Beginner Questions </span> </a> <nav class=md-nav aria-label="Common Beginner Questions"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#do-i-always-need-messageawarecomponent class=md-nav__link> <span class=md-ellipsis> "Do I always need MessageAwareComponent?" </span> </a> </li> <li class=md-nav__item> <a href=#can-i-send-a-message-to-multiple-targets class=md-nav__link> <span class=md-ellipsis> "Can I send a message to multiple targets?" </span> </a> <nav class=md-nav aria-label='"Can I send a message to multiple targets?"'> <ul class=md-nav__list> <li class=md-nav__item> <a href=#instead-use class=md-nav__link> <span class=md-ellipsis> Instead, use </span> </a> <nav class=md-nav aria-label="Instead, use"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#example class=md-nav__link> <span class=md-ellipsis> Example </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#what-if-i-forget-to-unsubscribe class=md-nav__link> <span class=md-ellipsis> "What if I forget to unsubscribe?" </span> </a> <nav class=md-nav aria-label='"What if I forget to unsubscribe?"'> <ul class=md-nav__list> <li class=md-nav__item> <a href=#the-system-handles-cleanup-automatically class=md-nav__link> <span class=md-ellipsis> The system handles cleanup automatically </span> </a> </li> <li class=md-nav__item> <a href=#old-way-easy-to-forget class=md-nav__link> <span class=md-ellipsis> Old way (easy to forget) </span> </a> <nav class=md-nav aria-label="Old way (easy to forget)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#dxmessaging-way-automatic-management class=md-nav__link> <span class=md-ellipsis> DxMessaging way (automatic management) </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#is-it-slower-than-regular-events class=md-nav__link> <span class=md-ellipsis> "Is it slower than regular events?" </span> </a> <nav class=md-nav aria-label='"Is it slower than regular events?"'> <ul class=md-nav__list> <li class=md-nav__item> <a href=#benchmark-comparison class=md-nav__link> <span class=md-ellipsis> Benchmark comparison </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#can-i-cancel-a-message class=md-nav__link> <span class=md-ellipsis> "Can I cancel a message?" </span> </a> <nav class=md-nav aria-label='"Can I cancel a message?"'> <ul class=md-nav__list> <li class=md-nav__item> <a href=#yes-thats-what-interceptors-are-for class=md-nav__link> <span class=md-ellipsis> Yes! That's what interceptors are for </span> </a> <nav class=md-nav aria-label="Yes! That's what interceptors are for"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#real-world-uses_3 class=md-nav__link> <span class=md-ellipsis> Real-world uses </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#can-i-see-what-messages-are-firing class=md-nav__link> <span class=md-ellipsis> "Can I see what messages are firing?" </span> </a> <nav class=md-nav aria-label='"Can I see what messages are firing?"'> <ul class=md-nav__list> <li class=md-nav__item> <a href=#yes-open-any-component-in-the-inspector-and-scroll-down class=md-nav__link> <span class=md-ellipsis> Yes! Open any component in the Inspector and scroll down </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#quick-checklist-am-i-doing-it-right class=md-nav__link> <span class=md-ellipsis> Quick Checklist: Am I Doing It Right </span> </a> </li> <li class=md-nav__item> <a href=#next-steps class=md-nav__link> <span class=md-ellipsis> Next Steps </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type=checkbox id=__nav_3> <div class="md-nav__link md-nav__container"> <a href=../../concepts/ class="md-nav__link "> <span class=md-ellipsis> Concepts </span> </a> <label class="md-nav__link " for=__nav_3 id=__nav_3_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3> <span class="md-nav__icon md-icon"></span> Concepts </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../concepts/mental-model/ class=md-nav__link> <span class=md-ellipsis> Mental Model </span> </a> </li> <li class=md-nav__item> <a href=../../concepts/message-types/ class=md-nav__link> <span class=md-ellipsis> Message Types </span> </a> </li> <li class=md-nav__item> <a href=../../concepts/listening-patterns/ class=md-nav__link> <span class=md-ellipsis> Listening Patterns </span> </a> </li> <li class=md-nav__item> <a href=../../concepts/targeting-and-context/ class=md-nav__link> <span class=md-ellipsis> Targeting & Context </span> </a> </li> <li class=md-nav__item> <a href=../../concepts/interceptors-and-ordering/ class=md-nav__link> <span class=md-ellipsis> Interceptors & Ordering </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type=checkbox id=__nav_4> <label class=md-nav__link for=__nav_4 id=__nav_4_label tabindex=0> <span class=md-ellipsis> Guides </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4> <span class="md-nav__icon md-icon"></span> Guides </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../guides/patterns/ class=md-nav__link> <span class=md-ellipsis> Patterns </span> </a> </li> <li class=md-nav__item> <a href=../../guides/unity-integration/ class=md-nav__link> <span class=md-ellipsis> Unity Integration </span> </a> </li> <li class=md-nav__item> <a href=../../guides/testing/ class=md-nav__link> <span class=md-ellipsis> Testing </span> </a> </li> <li class=md-nav__item> <a href=../../guides/diagnostics/ class=md-nav__link> <span class=md-ellipsis> Diagnostics </span> </a> </li> <li class=md-nav__item> <a href=../../guides/advanced/ class=md-nav__link> <span class=md-ellipsis> Advanced Topics </span> </a> </li> <li class=md-nav__item> <a href=../../guides/migration-guide/ class=md-nav__link> <span class=md-ellipsis> Migration Guide </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type=checkbox id=__nav_5> <label class=md-nav__link for=__nav_5 id=__nav_5_label tabindex=0> <span class=md-ellipsis> Architecture </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_5_label aria-expanded=false> <label class=md-nav__title for=__nav_5> <span class="md-nav__icon md-icon"></span> Architecture </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../architecture/design-and-architecture/ class=md-nav__link> <span class=md-ellipsis> Design & Architecture </span> </a> </li> <li class=md-nav__item> <a href=../../architecture/comparisons/ class=md-nav__link> <span class=md-ellipsis> Comparisons </span> </a> </li> <li class=md-nav__item> <a href=../../architecture/performance/ class=md-nav__link> <span class=md-ellipsis> Performance </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type=checkbox id=__nav_6> <label class=md-nav__link for=__nav_6 id=__nav_6_label tabindex=0> <span class=md-ellipsis> Advanced </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_6_label aria-expanded=false> <label class=md-nav__title for=__nav_6> <span class="md-nav__icon md-icon"></span> Advanced </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../advanced/emit-shorthands/ class=md-nav__link> <span class=md-ellipsis> Emit Shorthands </span> </a> </li> <li class=md-nav__item> <a href=../../advanced/message-bus-providers/ class=md-nav__link> <span class=md-ellipsis> Message Bus Providers </span> </a> </li> <li class=md-nav__item> <a href=../../advanced/registration-builders/ class=md-nav__link> <span class=md-ellipsis> Registration Builders </span> </a> </li> <li class=md-nav__item> <a href=../../advanced/runtime-configuration/ class=md-nav__link> <span class=md-ellipsis> Runtime Configuration </span> </a> </li> <li class=md-nav__item> <a href=../../advanced/string-messages/ class=md-nav__link> <span class=md-ellipsis> String Messages </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type=checkbox id=__nav_7> <div class="md-nav__link md-nav__container"> <a href=../../integrations/ class="md-nav__link "> <span class=md-ellipsis> Integrations </span> </a> <label class="md-nav__link " for=__nav_7 id=__nav_7_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_7_label aria-expanded=false> <label class=md-nav__title for=__nav_7> <span class="md-nav__icon md-icon"></span> Integrations </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../integrations/vcontainer/ class=md-nav__link> <span class=md-ellipsis> VContainer </span> </a> </li> <li class=md-nav__item> <a href=../../integrations/zenject/ class=md-nav__link> <span class=md-ellipsis> Zenject </span> </a> </li> <li class=md-nav__item> <a href=../../integrations/reflex/ class=md-nav__link> <span class=md-ellipsis> Reflex </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type=checkbox id=__nav_8> <label class=md-nav__link for=__nav_8 id=__nav_8_label tabindex=0> <span class=md-ellipsis> Examples </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_8_label aria-expanded=false> <label class=md-nav__title for=__nav_8> <span class="md-nav__icon md-icon"></span> Examples </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../examples/end-to-end/ class=md-nav__link> <span class=md-ellipsis> End-to-End </span> </a> </li> <li class=md-nav__item> <a href=../../examples/end-to-end-scene-transitions/ class=md-nav__link> <span class=md-ellipsis> Scene Transitions </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type=checkbox id=__nav_9> <label class=md-nav__link for=__nav_9 id=__nav_9_label tabindex=0> <span class=md-ellipsis> Reference </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_9_label aria-expanded=false> <label class=md-nav__title for=__nav_9> <span class="md-nav__icon md-icon"></span> Reference </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../reference/reference/ class=md-nav__link> <span class=md-ellipsis> API Reference (Practical) </span> </a> </li> <li class=md-nav__item> <a href=../../reference/quick-reference/ class=md-nav__link> <span class=md-ellipsis> Quick Reference </span> </a> </li> <li class=md-nav__item> <a href=../../reference/helpers/ class=md-nav__link> <span class=md-ellipsis> Helpers </span> </a> </li> <li class=md-nav__item> <a href=../../reference/faq/ class=md-nav__link> <span class=md-ellipsis> FAQ </span> </a> </li> <li class=md-nav__item> <a href=../../reference/glossary/ class=md-nav__link> <span class=md-ellipsis> Glossary </span> </a> </li> <li class=md-nav__item> <a href=../../reference/troubleshooting/ class=md-nav__link> <span class=md-ellipsis> Troubleshooting </span> </a> </li> <li class=md-nav__item> <a href=../../reference/compatibility/ class=md-nav__link> <span class=md-ellipsis> Compatibility </span> </a> </li> </ul> </nav> </li> </ul> </nav> </div> </div> </div> <div class="md-sidebar md-sidebar--secondary" data-md-component=sidebar data-md-type=toc> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--secondary" aria-label="Table of contents"> <label class=md-nav__title for=__toc> <span class="md-nav__icon md-icon"></span> Table of contents </label> <ul class=md-nav__list data-md-component=toc data-md-scrollfix> <li class=md-nav__item> <a href=#what-problem-does-it-solve class=md-nav__link> <span class=md-ellipsis> What Problem Does It Solve </span> </a> <nav class=md-nav aria-label="What Problem Does It Solve"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#the-old-way-spaghetti-code class=md-nav__link> <span class=md-ellipsis> The Old Way (Spaghetti Code) </span> </a> <nav class=md-nav aria-label="The Old Way (Spaghetti Code)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#problems class=md-nav__link> <span class=md-ellipsis> Problems </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#the-dxmessaging-way-clean-separation class=md-nav__link> <span class=md-ellipsis> The DxMessaging Way (Clean Separation) </span> </a> <nav class=md-nav aria-label="The DxMessaging Way (Clean Separation)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#benefits class=md-nav__link> <span class=md-ellipsis> Benefits </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#the-three-message-types-simple class=md-nav__link> <span class=md-ellipsis> The Three Message Types (Simple!) </span> </a> <nav class=md-nav aria-label="The Three Message Types (Simple!)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#1-untargeted-announcement-to-everyone class=md-nav__link> <span class=md-ellipsis> 1. Untargeted (Announcement to Everyone) </span> </a> <nav class=md-nav aria-label="1. Untargeted (Announcement to Everyone)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#real-world-uses class=md-nav__link> <span class=md-ellipsis> Real-world uses </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#2-targeted-letter-to-one-person class=md-nav__link> <span class=md-ellipsis> 2. Targeted (Letter to One Person) </span> </a> <nav class=md-nav aria-label="2. Targeted (Letter to One Person)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#real-world-uses_1 class=md-nav__link> <span class=md-ellipsis> Real-world uses </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#3-broadcast-news-from-one-source class=md-nav__link> <span class=md-ellipsis> 3. Broadcast (News from One Source) </span> </a> <nav class=md-nav aria-label="3. Broadcast (News from One Source)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#real-world-uses_2 class=md-nav__link> <span class=md-ellipsis> Real-world uses </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#the-message-journey-step-by-step class=md-nav__link> <span class=md-ellipsis> The Message Journey (Step by Step) </span> </a> <nav class=md-nav aria-label="The Message Journey (Step by Step)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#key-points class=md-nav__link> <span class=md-ellipsis> Key points </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#your-first-message-3-easy-steps class=md-nav__link> <span class=md-ellipsis> Your First Message (3 Easy Steps) </span> </a> <nav class=md-nav aria-label="Your First Message (3 Easy Steps)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#step-1-define-it class=md-nav__link> <span class=md-ellipsis> Step 1: Define It </span> </a> <nav class=md-nav aria-label="Step 1: Define It"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#what-are-those-dxsomething-tags class=md-nav__link> <span class=md-ellipsis> What are those [DxSomething] tags? </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#step-2-listen-for-it class=md-nav__link> <span class=md-ellipsis> Step 2: Listen for It </span> </a> </li> <li class=md-nav__item> <a href=#step-3-send-it class=md-nav__link> <span class=md-ellipsis> Step 3: Send It </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#common-patterns-visualized class=md-nav__link> <span class=md-ellipsis> Common Patterns Visualized </span> </a> <nav class=md-nav aria-label="Common Patterns Visualized"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#pattern-scene-transition class=md-nav__link> <span class=md-ellipsis> Pattern: Scene Transition </span> </a> </li> <li class=md-nav__item> <a href=#pattern-player-input---action class=md-nav__link> <span class=md-ellipsis> Pattern: Player Input -> Action </span> </a> </li> <li class=md-nav__item> <a href=#pattern-achievement-tracking class=md-nav__link> <span class=md-ellipsis> Pattern: Achievement Tracking </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#when-to-use-which-message-type class=md-nav__link> <span class=md-ellipsis> When to Use Which Message Type </span> </a> <nav class=md-nav aria-label="When to Use Which Message Type"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#use-untargeted-when class=md-nav__link> <span class=md-ellipsis> Use Untargeted When </span> </a> </li> <li class=md-nav__item> <a href=#use-targeted-when class=md-nav__link> <span class=md-ellipsis> Use Targeted When </span> </a> </li> <li class=md-nav__item> <a href=#use-broadcast-when class=md-nav__link> <span class=md-ellipsis> Use Broadcast When </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#mental-model-restaurant-analogy class=md-nav__link> <span class=md-ellipsis> Mental Model: Restaurant Analogy </span> </a> <nav class=md-nav aria-label="Mental Model: Restaurant Analogy"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#untargeted--restaurant-announcement class=md-nav__link> <span class=md-ellipsis> Untargeted = Restaurant Announcement </span> </a> </li> <li class=md-nav__item> <a href=#targeted--waiter-delivering-food class=md-nav__link> <span class=md-ellipsis> Targeted = Waiter Delivering Food </span> </a> </li> <li class=md-nav__item> <a href=#broadcast--customer-calling-waiter class=md-nav__link> <span class=md-ellipsis> Broadcast = Customer Calling Waiter </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#debugging-visualized class=md-nav__link> <span class=md-ellipsis> Debugging Visualized </span> </a> <nav class=md-nav aria-label="Debugging Visualized"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#messagingcomponent-inspector class=md-nav__link> <span class=md-ellipsis> MessagingComponent Inspector </span> </a> <nav class=md-nav aria-label="MessagingComponent Inspector"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#message-history-last-10 class=md-nav__link> <span class=md-ellipsis> Message History (last 10) </span> </a> <nav class=md-nav aria-label="Message History (last 10)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#registrations class=md-nav__link> <span class=md-ellipsis> Registrations </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#performance-at-a-glance class=md-nav__link> <span class=md-ellipsis> Performance at a Glance </span> </a> </li> <li class=md-nav__item> <a href=#learning-path class=md-nav__link> <span class=md-ellipsis> Learning Path </span> </a> </li> <li class=md-nav__item> <a href=#common-beginner-questions class=md-nav__link> <span class=md-ellipsis> Common Beginner Questions </span> </a> <nav class=md-nav aria-label="Common Beginner Questions"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#do-i-always-need-messageawarecomponent class=md-nav__link> <span class=md-ellipsis> "Do I always need MessageAwareComponent?" </span> </a> </li> <li class=md-nav__item> <a href=#can-i-send-a-message-to-multiple-targets class=md-nav__link> <span class=md-ellipsis> "Can I send a message to multiple targets?" </span> </a> <nav class=md-nav aria-label='"Can I send a message to multiple targets?"'> <ul class=md-nav__list> <li class=md-nav__item> <a href=#instead-use class=md-nav__link> <span class=md-ellipsis> Instead, use </span> </a> <nav class=md-nav aria-label="Instead, use"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#example class=md-nav__link> <span class=md-ellipsis> Example </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#what-if-i-forget-to-unsubscribe class=md-nav__link> <span class=md-ellipsis> "What if I forget to unsubscribe?" </span> </a> <nav class=md-nav aria-label='"What if I forget to unsubscribe?"'> <ul class=md-nav__list> <li class=md-nav__item> <a href=#the-system-handles-cleanup-automatically class=md-nav__link> <span class=md-ellipsis> The system handles cleanup automatically </span> </a> </li> <li class=md-nav__item> <a href=#old-way-easy-to-forget class=md-nav__link> <span class=md-ellipsis> Old way (easy to forget) </span> </a> <nav class=md-nav aria-label="Old way (easy to forget)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#dxmessaging-way-automatic-management class=md-nav__link> <span class=md-ellipsis> DxMessaging way (automatic management) </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#is-it-slower-than-regular-events class=md-nav__link> <span class=md-ellipsis> "Is it slower than regular events?" </span> </a> <nav class=md-nav aria-label='"Is it slower than regular events?"'> <ul class=md-nav__list> <li class=md-nav__item> <a href=#benchmark-comparison class=md-nav__link> <span class=md-ellipsis> Benchmark comparison </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#can-i-cancel-a-message class=md-nav__link> <span class=md-ellipsis> "Can I cancel a message?" </span> </a> <nav class=md-nav aria-label='"Can I cancel a message?"'> <ul class=md-nav__list> <li class=md-nav__item> <a href=#yes-thats-what-interceptors-are-for class=md-nav__link> <span class=md-ellipsis> Yes! That's what interceptors are for </span> </a> <nav class=md-nav aria-label="Yes! That's what interceptors are for"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#real-world-uses_3 class=md-nav__link> <span class=md-ellipsis> Real-world uses </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#can-i-see-what-messages-are-firing class=md-nav__link> <span class=md-ellipsis> "Can I see what messages are firing?" </span> </a> <nav class=md-nav aria-label='"Can I see what messages are firing?"'> <ul class=md-nav__list> <li class=md-nav__item> <a href=#yes-open-any-component-in-the-inspector-and-scroll-down class=md-nav__link> <span class=md-ellipsis> Yes! Open any component in the Inspector and scroll down </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#quick-checklist-am-i-doing-it-right class=md-nav__link> <span class=md-ellipsis> Quick Checklist: Am I Doing It Right </span> </a> </li> <li class=md-nav__item> <a href=#next-steps class=md-nav__link> <span class=md-ellipsis> Next Steps </span> </a> </li> </ul> </nav> </div> </div> </div> <div class=md-content data-md-component=content> <nav class=md-path aria-label=Navigation> <ol class=md-path__list> <li class=md-path__item> <a href=../.. class=md-path__link> <span class=md-ellipsis> Home </span> </a> </li> <li class=md-path__item> <a href=../ class=md-path__link> <span class=md-ellipsis> Getting Started </span> </a> </li> </ol> </nav> <article class="md-content__inner md-typeset"> <a href=https://github.com/wallstop/DxMessaging/edit/master/docs/getting-started/visual-guide.md title="Edit this page" class="md-content__button md-icon" rel=edit> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M10 20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4zm10.2-7c.1 0 .3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1 23H12v-2.1l6.1-6.1z"/></svg> </a> <a href=https://github.com/wallstop/DxMessaging/raw/master/docs/getting-started/visual-guide.md title="View source of this page" class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M17 18c.56 0 1 .44 1 1s-.44 1-1 1-1-.44-1-1 .44-1 1-1m0-3c-2.73 0-5.06 1.66-6 4 .94 2.34 3.27 4 6 4s5.06-1.66 6-4c-.94-2.34-3.27-4-6-4m0 6.5a2.5 2.5 0 0 1-2.5-2.5 2.5 2.5 0 0 1 2.5-2.5 2.5 2.5 0 0 1 2.5 2.5 2.5 2.5 0 0 1-2.5 2.5M9.27 20H6V4h7v5h5v4.07c.7.08 1.36.25 2 .49V8l-6-6H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h4.5a8.2 8.2 0 0 1-1.23-2"/></svg> </a> <h1 id=dxmessaging-visual-guide-for-beginners>DxMessaging Visual Guide for Beginners<a class=headerlink href=#dxmessaging-visual-guide-for-beginners title="Anchor link to this section">¶</a></h1> <p>If you're brand new to messaging systems, this visual guide will help you understand DxMessaging in minutes.</p> <h2 id=what-problem-does-it-solve>What Problem Does It Solve<a class=headerlink href=#what-problem-does-it-solve title="Anchor link to this section">¶</a></h2> <h3 id=the-old-way-spaghetti-code>The Old Way (Spaghetti Code)<a class=headerlink href=#the-old-way-spaghetti-code title="Anchor link to this section">¶</a></h3> <pre class=mermaid><code>%%{init: {'theme': 'dark'}}%%
|
|
2
|
+
flowchart LR
|
|
3
3
|
Player[Player]
|
|
4
4
|
Enemy[Enemy]
|
|
5
5
|
Inventory[Inventory]
|
|
@@ -15,8 +15,8 @@ graph LR
|
|
|
15
15
|
classDef danger stroke-width:2px
|
|
16
16
|
class Player,Enemy,Inventory danger
|
|
17
17
|
classDef success stroke-width:2px
|
|
18
|
-
class UI,Audio success</code></pre> <h4 id=problems>Problems<a class=headerlink href=#problems title="Anchor link to this section">¶</a></h4> <ul> <li>Everyone needs to know everyone else</li> <li>Hard to add/remove systems</li> <li>Memory leaks from forgotten unsubscribes</li> </ul> <h3 id=the-dxmessaging-way-clean-separation>The DxMessaging Way (Clean Separation)<a class=headerlink href=#the-dxmessaging-way-clean-separation title="Anchor link to this section">¶</a></h3> <pre class=mermaid><code>%%{init: {'theme': '
|
|
19
|
-
|
|
18
|
+
class UI,Audio success</code></pre> <h4 id=problems>Problems<a class=headerlink href=#problems title="Anchor link to this section">¶</a></h4> <ul> <li>Everyone needs to know everyone else</li> <li>Hard to add/remove systems</li> <li>Memory leaks from forgotten unsubscribes</li> </ul> <h3 id=the-dxmessaging-way-clean-separation>The DxMessaging Way (Clean Separation)<a class=headerlink href=#the-dxmessaging-way-clean-separation title="Anchor link to this section">¶</a></h3> <pre class=mermaid><code>%%{init: {'theme': 'dark'}}%%
|
|
19
|
+
flowchart TB
|
|
20
20
|
Player[Player]
|
|
21
21
|
Enemy[Enemy]
|
|
22
22
|
Inventory[Inventory]
|
|
@@ -74,7 +74,7 @@ graph TB
|
|
|
74
74
|
</span><span id=__span-2-12><a id=__codelineno-2-12 name=__codelineno-2-12 href=#__codelineno-2-12></a>
|
|
75
75
|
</span><span id=__span-2-13><a id=__codelineno-2-13 name=__codelineno-2-13 href=#__codelineno-2-13></a><span class=c1>// OR achievement system can listen to ALL enemies</span>
|
|
76
76
|
</span><span id=__span-2-14><a id=__codelineno-2-14 name=__codelineno-2-14 href=#__codelineno-2-14></a><span class=n>_</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=n>token</span><span class=p>.</span><span class=n>RegisterBroadcastWithoutSource</span><span class=o><</span><span class=n>TookDamage</span><span class=o>></span><span class=p>(</span><span class=n>OnAnyEnemy</span><span class=p>);</span>
|
|
77
|
-
</span></code></pre></div> <h4 id=real-world-uses_2>Real-world uses<a class=headerlink href=#real-world-uses_2 title="Anchor link to this section">¶</a></h4> <ul> <li>"I (player) took damage!"</li> <li>"I (enemy) died!"</li> <li>"I (chest) was opened!"</li> </ul> <h2 id=the-message-journey-step-by-step>The Message Journey (Step by Step)<a class=headerlink href=#the-message-journey-step-by-step title="Anchor link to this section">¶</a></h2> <p>When you send a message, here's what happens:</p> <pre class=mermaid><code>%%{init: {'theme': '
|
|
77
|
+
</span></code></pre></div> <h4 id=real-world-uses_2>Real-world uses<a class=headerlink href=#real-world-uses_2 title="Anchor link to this section">¶</a></h4> <ul> <li>"I (player) took damage!"</li> <li>"I (enemy) died!"</li> <li>"I (chest) was opened!"</li> </ul> <h2 id=the-message-journey-step-by-step>The Message Journey (Step by Step)<a class=headerlink href=#the-message-journey-step-by-step title="Anchor link to this section">¶</a></h2> <p>When you send a message, here's what happens:</p> <pre class=mermaid><code>%%{init: {'theme': 'dark'}}%%
|
|
78
78
|
sequenceDiagram
|
|
79
79
|
participant You as Your Code
|
|
80
80
|
participant Msg as Message
|
|
@@ -135,7 +135,7 @@ sequenceDiagram
|
|
|
135
135
|
</span><span id=__span-6-3><a id=__codelineno-6-3 name=__codelineno-6-3 href=#__codelineno-6-3></a><span class=n>healMsg</span><span class=p>.</span><span class=n>EmitComponentTargeted</span><span class=p>(</span><span class=n>playerComponent</span><span class=p>);</span>
|
|
136
136
|
</span><span id=__span-6-4><a id=__codelineno-6-4 name=__codelineno-6-4 href=#__codelineno-6-4></a>
|
|
137
137
|
</span><span id=__span-6-5><a id=__codelineno-6-5 name=__codelineno-6-5 href=#__codelineno-6-5></a><span class=c1>// Player will receive this message.</span>
|
|
138
|
-
</span></code></pre></div> <h2 id=common-patterns-visualized>Common Patterns Visualized<a class=headerlink href=#common-patterns-visualized title="Anchor link to this section">¶</a></h2> <h3 id=pattern-scene-transition>Pattern: Scene Transition<a class=headerlink href=#pattern-scene-transition title="Anchor link to this section">¶</a></h3> <pre class=mermaid><code>%%{init: {'theme': '
|
|
138
|
+
</span></code></pre></div> <h2 id=common-patterns-visualized>Common Patterns Visualized<a class=headerlink href=#common-patterns-visualized title="Anchor link to this section">¶</a></h2> <h3 id=pattern-scene-transition>Pattern: Scene Transition<a class=headerlink href=#pattern-scene-transition title="Anchor link to this section">¶</a></h3> <pre class=mermaid><code>%%{init: {'theme': 'dark'}}%%
|
|
139
139
|
sequenceDiagram
|
|
140
140
|
participant SM as SceneManager
|
|
141
141
|
participant Bus as Message Bus
|
|
@@ -165,7 +165,7 @@ sequenceDiagram
|
|
|
165
165
|
</span><span id=__span-7-10><a id=__codelineno-7-10 name=__codelineno-7-10 href=#__codelineno-7-10></a><span class=c1>// Many can listen independently</span>
|
|
166
166
|
</span><span id=__span-7-11><a id=__codelineno-7-11 name=__codelineno-7-11 href=#__codelineno-7-11></a><span class=n>_</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=n>audioToken</span><span class=p>.</span><span class=n>RegisterUntargeted</span><span class=o><</span><span class=n>SceneChanged</span><span class=o>></span><span class=p>(</span><span class=n>OnScene</span><span class=p>);</span>
|
|
167
167
|
</span><span id=__span-7-12><a id=__codelineno-7-12 name=__codelineno-7-12 href=#__codelineno-7-12></a><span class=n>_</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=n>saveToken</span><span class=p>.</span><span class=n>RegisterUntargeted</span><span class=o><</span><span class=n>SceneChanged</span><span class=o>></span><span class=p>(</span><span class=n>OnScene</span><span class=p>);</span>
|
|
168
|
-
</span></code></pre></div> <h3 id=pattern-player-input---action>Pattern: Player Input -> Action<a class=headerlink href=#pattern-player-input---action title="Anchor link to this section">¶</a></h3> <pre class=mermaid><code>%%{init: {'theme': '
|
|
168
|
+
</span></code></pre></div> <h3 id=pattern-player-input---action>Pattern: Player Input -> Action<a class=headerlink href=#pattern-player-input---action title="Anchor link to this section">¶</a></h3> <pre class=mermaid><code>%%{init: {'theme': 'dark'}}%%
|
|
169
169
|
sequenceDiagram
|
|
170
170
|
participant Input as InputSystem
|
|
171
171
|
participant Bus as Message Bus
|
|
@@ -190,7 +190,7 @@ sequenceDiagram
|
|
|
190
190
|
</span><span id=__span-8-11><a id=__codelineno-8-11 name=__codelineno-8-11 href=#__codelineno-8-11></a><span class=k>void</span><span class=w> </span><span class=nf>OnJump</span><span class=p>(</span><span class=k>ref</span><span class=w> </span><span class=n>Jump</span><span class=w> </span><span class=n>msg</span><span class=p>)</span><span class=w> </span><span class=p>{</span>
|
|
191
191
|
</span><span id=__span-8-12><a id=__codelineno-8-12 name=__codelineno-8-12 href=#__codelineno-8-12></a><span class=w> </span><span class=n>rb</span><span class=p>.</span><span class=n>AddForce</span><span class=p>(</span><span class=n>Vector3</span><span class=p>.</span><span class=n>up</span><span class=w> </span><span class=o>*</span><span class=w> </span><span class=n>msg</span><span class=p>.</span><span class=n>force</span><span class=p>,</span><span class=w> </span><span class=n>ForceMode</span><span class=p>.</span><span class=n>Impulse</span><span class=p>);</span>
|
|
192
192
|
</span><span id=__span-8-13><a id=__codelineno-8-13 name=__codelineno-8-13 href=#__codelineno-8-13></a><span class=p>}</span>
|
|
193
|
-
</span></code></pre></div> <h3 id=pattern-achievement-tracking>Pattern: Achievement Tracking<a class=headerlink href=#pattern-achievement-tracking title="Anchor link to this section">¶</a></h3> <pre class=mermaid><code>%%{init: {'theme': '
|
|
193
|
+
</span></code></pre></div> <h3 id=pattern-achievement-tracking>Pattern: Achievement Tracking<a class=headerlink href=#pattern-achievement-tracking title="Anchor link to this section">¶</a></h3> <pre class=mermaid><code>%%{init: {'theme': 'dark'}}%%
|
|
194
194
|
sequenceDiagram
|
|
195
195
|
participant E as Enemy
|
|
196
196
|
participant P as Player
|
|
@@ -220,8 +220,8 @@ sequenceDiagram
|
|
|
220
220
|
</span><span id=__span-9-9><a id=__codelineno-9-9 name=__codelineno-9-9 href=#__codelineno-9-9></a><span class=w> </span><span class=p>);</span>
|
|
221
221
|
</span><span id=__span-9-10><a id=__codelineno-9-10 name=__codelineno-9-10 href=#__codelineno-9-10></a><span class=w> </span><span class=p>}</span>
|
|
222
222
|
</span><span id=__span-9-11><a id=__codelineno-9-11 name=__codelineno-9-11 href=#__codelineno-9-11></a><span class=p>}</span>
|
|
223
|
-
</span></code></pre></div> <h2 id=when-to-use-which-message-type>When to Use Which Message Type<a class=headerlink href=#when-to-use-which-message-type title="Anchor link to this section">¶</a></h2> <h3 id=use-untargeted-when>Use Untargeted When<a class=headerlink href=#use-untargeted-when title="Anchor link to this section">¶</a></h3> <ul> <li>Global game state changes (pause, settings, scene load)</li> <li>System-wide announcements</li> <li>Configuration updates</li> </ul> <h3 id=use-targeted-when>Use Targeted When<a class=headerlink href=#use-targeted-when title="Anchor link to this section">¶</a></h3> <ul> <li>Commanding a specific object ("You, do this!")</li> <li>UI updates for specific elements</li> <li>Direct communication (A -> B)</li> </ul> <h3 id=use-broadcast-when>Use Broadcast When<a class=headerlink href=#use-broadcast-when title="Anchor link to this section">¶</a></h3> <ul> <li>Events others should know about ("I did this!")</li> <li>Analytics tracking</li> <li>Achievement triggers</li> <li>Notifications from specific sources</li> </ul> <h2 id=mental-model-restaurant-analogy>Mental Model: Restaurant Analogy<a class=headerlink href=#mental-model-restaurant-analogy title="Anchor link to this section">¶</a></h2> <p>Think of DxMessaging like a restaurant:</p> <h3 id=untargeted--restaurant-announcement>Untargeted = Restaurant Announcement<a class=headerlink href=#untargeted--restaurant-announcement title="Anchor link to this section">¶</a></h3> <blockquote> <p>"Attention all customers: We're closing in 10 minutes!"</p> <p>-> Everyone hears it</p> </blockquote> <h3 id=targeted--waiter-delivering-food>Targeted = Waiter Delivering Food<a class=headerlink href=#targeted--waiter-delivering-food title="Anchor link to this section">¶</a></h3> <blockquote> <p>"Order for table 5: Here's your burger"</p> <p>-> Only table 5 gets it</p> </blockquote> <h3 id=broadcast--customer-calling-waiter>Broadcast = Customer Calling Waiter<a class=headerlink href=#broadcast--customer-calling-waiter title="Anchor link to this section">¶</a></h3> <blockquote> <p>"Excuse me, I need a refill!" (from table 3)</p> <p>-> Comes from table 3</p> <p>-> Any available waiter can respond</p> <p>-> Manager might track it for statistics</p> </blockquote> <h2 id=debugging-visualized>Debugging Visualized<a class=headerlink href=#debugging-visualized title="Anchor link to this section">¶</a></h2> <p>DxMessaging has built-in Inspector support!</p> <h3 id=messagingcomponent-inspector>MessagingComponent Inspector<a class=headerlink href=#messagingcomponent-inspector title="Anchor link to this section">¶</a></h3> <h4 id=message-history-last-10>Message History (last 10)<a class=headerlink href=#message-history-last-10 title="Anchor link to this section">¶</a></h4> <ul> <li><code>12:34:05 - Heal -> Player (50)</code></li> <li><code>12:34:03 - Jump -> Player</code></li> <li><code>12:34:01 - GamePaused (global)</code></li> </ul> <h5 id=registrations>Registrations<a class=headerlink href=#registrations title="Anchor link to this section">¶</a></h5> <ul> <li>Heal (priority: 0, 5 calls)</li> <li>Jump (priority: 0, 2 calls)</li> <li>TookDamage (priority: 10)</li> </ul> <h2 id=performance-at-a-glance>Performance at a Glance<a class=headerlink href=#performance-at-a-glance title="Anchor link to this section">¶</a></h2> <table> <thead> <tr> <th>Metric</th> <th>Traditional C# Events</th> <th>DxMessaging</th> </tr> </thead> <tbody> <tr> <td><strong>Speed</strong></td> <td>(baseline)</td> <td>(~10ns slower, negligible)</td> </tr> <tr> <td><strong>Memory</strong></td> <td>Can leak!</td> <td>Automatic cleanup (struct messages)</td> </tr> <tr> <td><strong>Coupling</strong></td> <td>Tight coupling</td> <td>Zero coupling</td> </tr> </tbody> </table> <p><strong>Bottom line:</strong> Slightly slower than raw events, but:</p> <ul> <li>Prevents common memory leaks</li> <li>Zero coupling</li> <li>Full observability</li> <li>Predictable ordering</li> </ul> <h2 id=learning-path>Learning Path<a class=headerlink href=#learning-path title="Anchor link to this section">¶</a></h2> <pre class=mermaid><code>%%{init: {'theme': '
|
|
224
|
-
|
|
223
|
+
</span></code></pre></div> <h2 id=when-to-use-which-message-type>When to Use Which Message Type<a class=headerlink href=#when-to-use-which-message-type title="Anchor link to this section">¶</a></h2> <h3 id=use-untargeted-when>Use Untargeted When<a class=headerlink href=#use-untargeted-when title="Anchor link to this section">¶</a></h3> <ul> <li>Global game state changes (pause, settings, scene load)</li> <li>System-wide announcements</li> <li>Configuration updates</li> </ul> <h3 id=use-targeted-when>Use Targeted When<a class=headerlink href=#use-targeted-when title="Anchor link to this section">¶</a></h3> <ul> <li>Commanding a specific object ("You, do this!")</li> <li>UI updates for specific elements</li> <li>Direct communication (A -> B)</li> </ul> <h3 id=use-broadcast-when>Use Broadcast When<a class=headerlink href=#use-broadcast-when title="Anchor link to this section">¶</a></h3> <ul> <li>Events others should know about ("I did this!")</li> <li>Analytics tracking</li> <li>Achievement triggers</li> <li>Notifications from specific sources</li> </ul> <h2 id=mental-model-restaurant-analogy>Mental Model: Restaurant Analogy<a class=headerlink href=#mental-model-restaurant-analogy title="Anchor link to this section">¶</a></h2> <p>Think of DxMessaging like a restaurant:</p> <h3 id=untargeted--restaurant-announcement>Untargeted = Restaurant Announcement<a class=headerlink href=#untargeted--restaurant-announcement title="Anchor link to this section">¶</a></h3> <blockquote> <p>"Attention all customers: We're closing in 10 minutes!"</p> <p>-> Everyone hears it</p> </blockquote> <h3 id=targeted--waiter-delivering-food>Targeted = Waiter Delivering Food<a class=headerlink href=#targeted--waiter-delivering-food title="Anchor link to this section">¶</a></h3> <blockquote> <p>"Order for table 5: Here's your burger"</p> <p>-> Only table 5 gets it</p> </blockquote> <h3 id=broadcast--customer-calling-waiter>Broadcast = Customer Calling Waiter<a class=headerlink href=#broadcast--customer-calling-waiter title="Anchor link to this section">¶</a></h3> <blockquote> <p>"Excuse me, I need a refill!" (from table 3)</p> <p>-> Comes from table 3</p> <p>-> Any available waiter can respond</p> <p>-> Manager might track it for statistics</p> </blockquote> <h2 id=debugging-visualized>Debugging Visualized<a class=headerlink href=#debugging-visualized title="Anchor link to this section">¶</a></h2> <p>DxMessaging has built-in Inspector support!</p> <h3 id=messagingcomponent-inspector>MessagingComponent Inspector<a class=headerlink href=#messagingcomponent-inspector title="Anchor link to this section">¶</a></h3> <h4 id=message-history-last-10>Message History (last 10)<a class=headerlink href=#message-history-last-10 title="Anchor link to this section">¶</a></h4> <ul> <li><code>12:34:05 - Heal -> Player (50)</code></li> <li><code>12:34:03 - Jump -> Player</code></li> <li><code>12:34:01 - GamePaused (global)</code></li> </ul> <h5 id=registrations>Registrations<a class=headerlink href=#registrations title="Anchor link to this section">¶</a></h5> <ul> <li>Heal (priority: 0, 5 calls)</li> <li>Jump (priority: 0, 2 calls)</li> <li>TookDamage (priority: 10)</li> </ul> <h2 id=performance-at-a-glance>Performance at a Glance<a class=headerlink href=#performance-at-a-glance title="Anchor link to this section">¶</a></h2> <table> <thead> <tr> <th>Metric</th> <th>Traditional C# Events</th> <th>DxMessaging</th> </tr> </thead> <tbody> <tr> <td><strong>Speed</strong></td> <td>(baseline)</td> <td>(~10ns slower, negligible)</td> </tr> <tr> <td><strong>Memory</strong></td> <td>Can leak!</td> <td>Automatic cleanup (struct messages)</td> </tr> <tr> <td><strong>Coupling</strong></td> <td>Tight coupling</td> <td>Zero coupling</td> </tr> </tbody> </table> <p><strong>Bottom line:</strong> Slightly slower than raw events, but:</p> <ul> <li>Prevents common memory leaks</li> <li>Zero coupling</li> <li>Full observability</li> <li>Predictable ordering</li> </ul> <h2 id=learning-path>Learning Path<a class=headerlink href=#learning-path title="Anchor link to this section">¶</a></h2> <pre class=mermaid><code>%%{init: {'theme': 'dark'}}%%
|
|
224
|
+
flowchart TD
|
|
225
225
|
Start[START HERE<br/>Read this Visual Guide<br/>5 min]
|
|
226
226
|
Start --> Step2[Try Quick Start example<br/>5 min<br/>Define -> Listen -> Send]
|
|
227
227
|
Step2 --> Step3[Import Mini Combat sample<br/>10 min<br/>See it in action!]
|
|
@@ -253,4 +253,4 @@ graph TD
|
|
|
253
253
|
</span><span id=__span-13-6><a id=__codelineno-13-6 name=__codelineno-13-6 href=#__codelineno-13-6></a><span class=w> </span><span class=k>return</span><span class=w> </span><span class=k>true</span><span class=p>;</span><span class=w> </span><span class=c1>// Allow</span>
|
|
254
254
|
</span><span id=__span-13-7><a id=__codelineno-13-7 name=__codelineno-13-7 href=#__codelineno-13-7></a><span class=w> </span><span class=p>}</span>
|
|
255
255
|
</span><span id=__span-13-8><a id=__codelineno-13-8 name=__codelineno-13-8 href=#__codelineno-13-8></a><span class=p>);</span>
|
|
256
|
-
</span></code></pre></div> <h5 id=real-world-uses_3>Real-world uses<a class=headerlink href=#real-world-uses_3 title="Anchor link to this section">¶</a></h5> <ul> <li>Block input during cutscenes</li> <li>Cancel damage when invincible</li> <li>Prevent cheating (clamp values)</li> <li>Enforce game rules globally</li> </ul> <h3 id=can-i-see-what-messages-are-firing>"Can I see what messages are firing?"<a class=headerlink href=#can-i-see-what-messages-are-firing title="Anchor link to this section">¶</a></h3> <h4 id=yes-open-any-component-in-the-inspector-and-scroll-down>Yes! Open any component in the Inspector and scroll down<a class=headerlink href=#yes-open-any-component-in-the-inspector-and-scroll-down title="Anchor link to this section">¶</a></h4> <p>You'll see:</p> <ul> <li>Message history (last 50 messages with timestamps)</li> <li>Active registrations (what you're listening to)</li> <li>Call counts (how many times each handler ran)</li> </ul> <p><strong>No more guessing.</strong> You can literally see your event flow in real-time.</p> <h2 id=quick-checklist-am-i-doing-it-right>Quick Checklist: Am I Doing It Right<a class=headerlink href=#quick-checklist-am-i-doing-it-right title="Anchor link to this section">¶</a></h2> <ul class=task-list> <li class=task-list-item><label class=task-list-control><input type=checkbox disabled><span class=task-list-indicator></span></label> Using <code>MessageAwareComponent</code> for Unity components?</li> <li class=task-list-item><label class=task-list-control><input type=checkbox disabled><span class=task-list-indicator></span></label> Defining messages as <code>readonly struct</code>?</li> <li class=task-list-item><label class=task-list-control><input type=checkbox disabled><span class=task-list-indicator></span></label> Using <code>[DxAutoConstructor]</code> to avoid boilerplate?</li> <li class=task-list-item><label class=task-list-control><input type=checkbox disabled><span class=task-list-indicator></span></label> Storing struct in variable before emitting?</li> <li class=task-list-item><label class=task-list-control><input type=checkbox disabled><span class=task-list-indicator></span></label> Choosing the right message type (Untargeted/Targeted/Broadcast)?</li> <li class=task-list-item><label class=task-list-control><input type=checkbox disabled><span class=task-list-indicator></span></label> Using GameObject/Component emit helpers?</li> </ul> <p>If you checked all these, you are following best practices.</p> <h2 id=next-steps>Next Steps<a class=headerlink href=#next-steps title="Anchor link to this section">¶</a></h2> <p>Ready to dive deeper?</p> <ol> <li><strong><a href=../getting-started/ >Getting Started Guide</a></strong> - Full guide with more details</li> <li><strong><a href=../../guides/patterns/ >Common Patterns</a></strong> - Real-world examples</li> <li><strong><a href=../../concepts/message-types/ >Message Types</a></strong> - Deep dive into when to use what</li> <li><strong><a href=../../guides/diagnostics/ >Diagnostics</a></strong> - Master the Inspector tools</li> </ol> <hr> <p><strong>Summary:</strong> DxMessaging provides a structured approach to inter-component communication. You define the message, specify recipients, and the system handles delivery.</p> <aside class=md-source-file> <span class=md-source-file__fact> <span class=md-icon title="Last update"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M21 13.1c-.1 0-.3.1-.4.2l-1 1 2.1 2.1 1-1c.2-.2.2-.6 0-.8l-1.3-1.3c-.1-.1-.2-.2-.4-.2m-1.9 1.8-6.1 6V23h2.1l6.1-6.1zM12.5 7v5.2l4 2.4-1 1L11 13V7zM11 21.9c-5.1-.5-9-4.8-9-9.9C2 6.5 6.5 2 12 2c5.3 0 9.6 4.1 10 9.3-.3-.1-.6-.2-1-.2s-.7.1-1 .2C19.6 7.2 16.2 4 12 4c-4.4 0-8 3.6-8 8 0 4.1 3.1 7.5 7.1 7.9l-.1.2z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago" title="January 26, 2026 18:15:02 UTC"><span class=timeago datetime=2026-01-26T18:15:02+00:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date" title="January 26, 2026 18:15:02 UTC">2026-01-26</span> </span> <span class=md-source-file__fact> <span class=md-icon title=Created> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M14.47 15.08 11 13V7h1.5v5.25l3.08 1.83c-.41.28-.79.62-1.11 1m-1.39 4.84c-.36.05-.71.08-1.08.08-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8c0 .37-.03.72-.08 1.08.69.1 1.33.32 1.92.64.1-.56.16-1.13.16-1.72 0-5.5-4.5-10-10-10S2 6.5 2 12s4.47 10 10 10c.59 0 1.16-.06 1.72-.16-.32-.59-.54-1.23-.64-1.92M18 15v3h-3v2h3v3h2v-3h3v-2h-3v-3z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago" title="January 26, 2026 18:15:02 UTC"><span class=timeago datetime=2026-01-26T18:15:02+00:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date" title="January 26, 2026 18:15:02 UTC">2026-01-26</span> </span> </aside> </article> </div> <script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var labels=set.querySelector(".tabbed-labels");for(var tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script> <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script> </div> <button type=button class="md-top md-icon" data-md-component=top hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8z"/></svg> Back to top </button> </main> <footer class=md-footer> <nav class="md-footer__inner md-grid" aria-label=Footer> <a href=../getting-started/ class="md-footer__link md-footer__link--prev" aria-label="Previous: Getting Started Guide"> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg> </div> <div class=md-footer__title> <span class=md-footer__direction> Previous </span> <div class=md-ellipsis> Getting Started Guide </div> </div> </a> <a href=../../concepts/message-types/ class="md-footer__link md-footer__link--next" aria-label="Next: Message Types"> <div class=md-footer__title> <span class=md-footer__direction> Next </span> <div class=md-ellipsis> Message Types </div> </div> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11z"/></svg> </div> </a> </nav> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <div class=md-copyright> <div class=md-copyright__highlight> Copyright © 2017-2026 Wallstop Studios </div> </div> <div class=md-social> <a href=https://github.com/wallstop target=_blank rel=noopener title="Wallstop Studios on GitHub" class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 512 512"><!-- Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M173.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M252.8 8C114.1 8 8 113.3 8 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C436.2 457.8 504 362.9 504 252 504 113.3 391.5 8 252.8 8M105.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2"/></svg> </a> </div> </div> </div> </footer> </div> <div class=md-dialog data-md-component=dialog> <div class="md-dialog__inner md-typeset"></div> </div> <div class=md-progress data-md-component=progress role=progressbar></div> <script id=__config type=application/json>{"annotate": null, "base": "../..", "features": ["announce.dismiss", "content.action.edit", "content.action.view", "content.code.annotate", "content.code.copy", "content.tabs.link", "navigation.expand", "navigation.footer", "navigation.indexes", "navigation.instant", "navigation.instant.prefetch", "navigation.instant.progress", "navigation.path", "navigation.sections", "navigation.tabs", "navigation.tabs.sticky", "navigation.top", "navigation.tracking", "search.highlight", "search.share", "search.suggest", "toc.follow"], "search": "../../assets/javascripts/workers/search.2c215733.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script> <script src=../../assets/javascripts/bundle.79ae519e.min.js></script> <script src=../../js/timeago.min.js></script> <script src=../../js/timeago_mkdocs_material.js></script> <script src=https://unpkg.com/mermaid@11/dist/mermaid.min.js></script> <script src=../../javascripts/mermaid-config.js></script> <script src=../../javascripts/csharp-highlight.js></script> </body> </html>
|
|
256
|
+
</span></code></pre></div> <h5 id=real-world-uses_3>Real-world uses<a class=headerlink href=#real-world-uses_3 title="Anchor link to this section">¶</a></h5> <ul> <li>Block input during cutscenes</li> <li>Cancel damage when invincible</li> <li>Prevent cheating (clamp values)</li> <li>Enforce game rules globally</li> </ul> <h3 id=can-i-see-what-messages-are-firing>"Can I see what messages are firing?"<a class=headerlink href=#can-i-see-what-messages-are-firing title="Anchor link to this section">¶</a></h3> <h4 id=yes-open-any-component-in-the-inspector-and-scroll-down>Yes! Open any component in the Inspector and scroll down<a class=headerlink href=#yes-open-any-component-in-the-inspector-and-scroll-down title="Anchor link to this section">¶</a></h4> <p>You'll see:</p> <ul> <li>Message history (last 50 messages with timestamps)</li> <li>Active registrations (what you're listening to)</li> <li>Call counts (how many times each handler ran)</li> </ul> <p><strong>No more guessing.</strong> You can literally see your event flow in real-time.</p> <h2 id=quick-checklist-am-i-doing-it-right>Quick Checklist: Am I Doing It Right<a class=headerlink href=#quick-checklist-am-i-doing-it-right title="Anchor link to this section">¶</a></h2> <ul class=task-list> <li class=task-list-item><label class=task-list-control><input type=checkbox disabled><span class=task-list-indicator></span></label> Using <code>MessageAwareComponent</code> for Unity components?</li> <li class=task-list-item><label class=task-list-control><input type=checkbox disabled><span class=task-list-indicator></span></label> Defining messages as <code>readonly struct</code>?</li> <li class=task-list-item><label class=task-list-control><input type=checkbox disabled><span class=task-list-indicator></span></label> Using <code>[DxAutoConstructor]</code> to avoid boilerplate?</li> <li class=task-list-item><label class=task-list-control><input type=checkbox disabled><span class=task-list-indicator></span></label> Storing struct in variable before emitting?</li> <li class=task-list-item><label class=task-list-control><input type=checkbox disabled><span class=task-list-indicator></span></label> Choosing the right message type (Untargeted/Targeted/Broadcast)?</li> <li class=task-list-item><label class=task-list-control><input type=checkbox disabled><span class=task-list-indicator></span></label> Using GameObject/Component emit helpers?</li> </ul> <p>If you checked all these, you are following best practices.</p> <h2 id=next-steps>Next Steps<a class=headerlink href=#next-steps title="Anchor link to this section">¶</a></h2> <p>Ready to dive deeper?</p> <ol> <li><strong><a href=../../concepts/mental-model/ >Mental Model</a></strong> - Understand the philosophy</li> <li><strong><a href=../getting-started/ >Getting Started Guide</a></strong> - Full guide with more details</li> <li><strong><a href=../../guides/patterns/ >Common Patterns</a></strong> - Real-world examples</li> <li><strong><a href=../../concepts/message-types/ >Message Types</a></strong> - Deep dive into when to use what</li> <li><strong><a href=../../guides/diagnostics/ >Diagnostics</a></strong> - Master the Inspector tools</li> </ol> <hr> <p><strong>Summary:</strong> DxMessaging provides a structured approach to inter-component communication. You define the message, specify recipients, and the system handles delivery.</p> <aside class=md-source-file> <span class=md-source-file__fact> <span class=md-icon title="Last update"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M21 13.1c-.1 0-.3.1-.4.2l-1 1 2.1 2.1 1-1c.2-.2.2-.6 0-.8l-1.3-1.3c-.1-.1-.2-.2-.4-.2m-1.9 1.8-6.1 6V23h2.1l6.1-6.1zM12.5 7v5.2l4 2.4-1 1L11 13V7zM11 21.9c-5.1-.5-9-4.8-9-9.9C2 6.5 6.5 2 12 2c5.3 0 9.6 4.1 10 9.3-.3-.1-.6-.2-1-.2s-.7.1-1 .2C19.6 7.2 16.2 4 12 4c-4.4 0-8 3.6-8 8 0 4.1 3.1 7.5 7.1 7.9l-.1.2z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago" title="January 29, 2026 05:02:02 UTC"><span class=timeago datetime=2026-01-29T05:02:02+00:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date" title="January 29, 2026 05:02:02 UTC">2026-01-29</span> </span> <span class=md-source-file__fact> <span class=md-icon title=Created> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M14.47 15.08 11 13V7h1.5v5.25l3.08 1.83c-.41.28-.79.62-1.11 1m-1.39 4.84c-.36.05-.71.08-1.08.08-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8c0 .37-.03.72-.08 1.08.69.1 1.33.32 1.92.64.1-.56.16-1.13.16-1.72 0-5.5-4.5-10-10-10S2 6.5 2 12s4.47 10 10 10c.59 0 1.16-.06 1.72-.16-.32-.59-.54-1.23-.64-1.92M18 15v3h-3v2h3v3h2v-3h3v-2h-3v-3z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago" title="January 27, 2026 04:59:07 UTC"><span class=timeago datetime=2026-01-27T04:59:07+00:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date" title="January 27, 2026 04:59:07 UTC">2026-01-27</span> </span> </aside> </article> </div> <script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var labels=set.querySelector(".tabbed-labels");for(var tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script> <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script> </div> <button type=button class="md-top md-icon" data-md-component=top hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8z"/></svg> Back to top </button> </main> <footer class=md-footer> <nav class="md-footer__inner md-grid" aria-label=Footer> <a href=../getting-started/ class="md-footer__link md-footer__link--prev" aria-label="Previous: Getting Started Guide"> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg> </div> <div class=md-footer__title> <span class=md-footer__direction> Previous </span> <div class=md-ellipsis> Getting Started Guide </div> </div> </a> <a href=../../concepts/ class="md-footer__link md-footer__link--next" aria-label="Next: Concepts"> <div class=md-footer__title> <span class=md-footer__direction> Next </span> <div class=md-ellipsis> Concepts </div> </div> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11z"/></svg> </div> </a> </nav> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <div class=md-copyright> <div class=md-copyright__highlight> Copyright © 2017-2026 Wallstop Studios </div> </div> <div class=md-social> <a href=https://github.com/wallstop target=_blank rel=noopener title="Wallstop Studios on GitHub" class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 512 512"><!-- Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M173.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M252.8 8C114.1 8 8 113.3 8 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C436.2 457.8 504 362.9 504 252 504 113.3 391.5 8 252.8 8M105.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2"/></svg> </a> </div> </div> </div> </footer> </div> <div class=md-dialog data-md-component=dialog> <div class="md-dialog__inner md-typeset"></div> </div> <div class=md-progress data-md-component=progress role=progressbar></div> <script id=__config type=application/json>{"annotate": null, "base": "../..", "features": ["announce.dismiss", "content.action.edit", "content.action.view", "content.code.annotate", "content.code.copy", "content.tabs.link", "navigation.expand", "navigation.footer", "navigation.indexes", "navigation.instant", "navigation.instant.prefetch", "navigation.instant.progress", "navigation.path", "navigation.sections", "navigation.tabs", "navigation.tabs.sticky", "navigation.top", "navigation.tracking", "search.highlight", "search.share", "search.suggest", "toc.follow"], "search": "../../assets/javascripts/workers/search.2c215733.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script> <script src=../../assets/javascripts/bundle.79ae519e.min.js></script> <script src=../../js/timeago.min.js></script> <script src=../../js/timeago_mkdocs_material.js></script> <script src=https://unpkg.com/mermaid@11/dist/mermaid.min.js></script> <script src=../../javascripts/mermaid-config.js></script> <script src=../../javascripts/csharp-highlight.js></script> </body> </html>
|