@startuml title Alternative D: iceoryx-based ECU forwarding CaPro messages to Gateway and User App package "iceoryx instance e.g. electronic control unit" { component RouDi { artifact discoveryLoop [ PortManager::sendToAllMatchingInterfacePorts() ] } component "User App" { component DiscoveryInfoA <> { artifact DiscoveryInfoNoteA [ +findService() : cxx::expected -m_subscriber : Subscriber -m_lastServiceRegistry : ServiceRegistryTopic ] } component UserAppListener <> component UserDefinedCallback <> } component "DDS Gateway" { component DiscoveryInfoB <> { artifact DiscoveryInfoNoteB [ +findService() : cxx::expected -m_subscriber : Subscriber -m_lastServiceRegistry : ServiceRegistryTopic ] } component GatewayListener <> component GatewayUserDefinedCallback <> } } package "DDS instance e.g. electronic control unit" { component DCPSTopic } [DiscoveryInfoNoteB] ..> [DCPSTopic] : Implemented [discoveryLoop] ..> [DiscoveryInfoNoteA] : publish(ServiceRegistryTopic) [discoveryLoop] ..> [DiscoveryInfoNoteB] : publish(ServiceRegistryTopic) [DCPSTopic] ..> [DiscoveryInfoNoteB] : Not yet implemented [GatewayListener] ..> [GatewayUserDefinedCallback] : calls [UserAppListener] ..> [UserDefinedCallback] : calls [DiscoveryInfoNoteA] ..> [UserAppListener] : attached to [DiscoveryInfoNoteB] ..> [GatewayListener] : attached to @enduml