Conversation
…d classes - Add 4 new implementation tags in static_group_names.h: ZeromqInterprocessTag, ZeromqIntermoduleTag, UdpmInterprocessTag, UdpmIntermoduleTag - Add include guards and <array> include to static_group_names.h - Remove default ImplementationTag from InterProcessTransporterBase - Convert InterProcessForwarder to 2-arg template; add deprecated 1-arg specialisation (void tag) with deprecated constructor warning - Convert InterModuleForwarder to 2-arg template; add deprecated 1-arg specialisation (void tag) with deprecated constructor warning - Update InterModuleTransporterBase alias to 3-arg - Update InterProcessPortalBase to 3-arg template - Update InterModulePortalBase to 3-arg template - Update InterProcessPortalImplementation in zeromq and udpm to 3-arg template template parameter - Add zeromq::InterProcessForwarder and zeromq::InterModuleForwarder aliases - Add udpm::InterProcessForwarder and udpm::InterModuleForwarder aliases - Update zeromq/udpm InterProcessPortal and InterModulePortal aliases with explicit implementation tags - Update internal middleware files (simple_thread.h, driver_thread.h, driver_thread.cpp, io_transporters.h, io_interface.h) to use explicit ZeromqInterprocessTag to avoid deprecation warnings in library code Agent-Logs-Url: https://github.com/GobySoft/goby3/sessions/c6ca443b-8a07-4692-a671-3732170b90b2 Co-authored-by: tsaubergine <732276+tsaubergine@users.noreply.github.com>
Agent-Logs-Url: https://github.com/GobySoft/goby3/sessions/c6ca443b-8a07-4692-a671-3732170b90b2 Co-authored-by: tsaubergine <732276+tsaubergine@users.noreply.github.com>
Agent-Logs-Url: https://github.com/GobySoft/goby3/sessions/1e9e4359-992e-49b3-b502-88884c861876 Co-authored-by: tsaubergine <732276+tsaubergine@users.noreply.github.com>
…onTag, add zeromq/udpm SimpleThread, move tags to zeromq/udpm detail headers Agent-Logs-Url: https://github.com/GobySoft/goby3/sessions/1e9e4359-992e-49b3-b502-88884c861876 Co-authored-by: tsaubergine <732276+tsaubergine@users.noreply.github.com>
…ation. Switch tests and other applications to use correct interprocess implementation
…erProcess/Module to be more explicit about deprecated specialization
…parate deprecated InterProcessForwarder from rest of header. Isolate Boost.StateMachine deprecated warning so we can leave Wdeprecated-declarations enabled for everything else
…should be supported
Agent-Logs-Url: https://github.com/GobySoft/goby3/sessions/025c0e4f-e8aa-46a0-8778-8e4bcde7eb36 Co-authored-by: tsaubergine <732276+tsaubergine@users.noreply.github.com>
…poller() Agent-Logs-Url: https://github.com/GobySoft/goby3/sessions/025c0e4f-e8aa-46a0-8778-8e4bcde7eb36 Co-authored-by: tsaubergine <732276+tsaubergine@users.noreply.github.com>
… fork Agent-Logs-Url: https://github.com/GobySoft/goby3/sessions/dcd7e94d-36f4-414c-bf67-833374e174fe Co-authored-by: tsaubergine <732276+tsaubergine@users.noreply.github.com>
…-instances Add attach_poller() to PollerInterface + unit test (ZMQ + UDPM)
…tag-template-parameter Finalize ImplementationTag template parameter for InterProcessTransporterBase
There was a problem hiding this comment.
Pull request overview
This PR introduces implementation tags for interprocess/intermodule transporters so each implementation (e.g., ZeroMQ vs UDPM) uses distinct internal middleware group names, enabling multiple interprocess layers to run in parallel without colliding. It also adds a PollerInterface::attach() mechanism so one poller can drive polling of additional pollers from a single poll() call.
Changes:
- Add
ImplementationTagplumbing through middleware interprocess/intermodule base classes and expose taggedInterProcessForwarder/InterModuleForwarderand taggedSimpleThreadaliases for ZeroMQ and UDPM. - Add
PollerInterface::attach()and a new test that validates attached polling across ZeroMQ + UDPM in forked processes. - Update intervehicle modem driver thread to be templated on the implementation tag and adjust various apps/tests to use the tagged forwarders/threads.
Reviewed changes
Copilot reviewed 50 out of 50 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
| src/zeromq/transport/interprocess.h | Wire ZeroMQ portals/forwarders to use detail::InterProcessTag. |
| src/zeromq/transport/interprocess.cpp | Minor cleanup (remove debug print; formatting). |
| src/zeromq/transport/intermodule.h | Wire ZeroMQ intermodule portal/forwarder to detail::InterModuleTag. |
| src/zeromq/transport/detail/tags.h | Add ZeroMQ implementation tag definitions (prefix strings). |
| src/zeromq/liaison/liaison_container.h | Switch liaison comms thread to goby::zeromq::SimpleThread. |
| src/zeromq/application/simple_thread.h | Add ZeroMQ SimpleThread alias selecting InterProcessTag. |
| src/zeromq/application/multi_thread.h | Include ZeroMQ simple_thread.h so callers can use the alias. |
| src/udpm/transport/interprocess.h | Wire UDPM portals/forwarders to use detail::InterProcessTag. |
| src/udpm/transport/intermodule.h | Wire UDPM intermodule portal/forwarder to detail::InterModuleTag. |
| src/udpm/transport/detail/tags.h | Add UDPM implementation tag definitions (prefix strings). |
| src/udpm/application/simple_thread.h | Add UDPM SimpleThread alias selecting InterProcessTag. |
| src/udpm/application/multi_thread.h | Include UDPM simple_thread.h so callers can use the alias. |
| src/test/zeromq/zeromq_intermodule_and_interprocess/test.cpp | Update test to use tagged ZeroMQ InterModuleForwarder. |
| src/test/zeromq/poller_attach_test/test.proto | New proto for attach/poll test payload. |
| src/test/zeromq/poller_attach_test/test.cpp | New test exercising PollerInterface::attach() across ZMQ+UDPM. |
| src/test/zeromq/poller_attach_test/CMakeLists.txt | Build + register the new attach test. |
| src/test/zeromq/multi_thread_app2/test.cpp | Use goby::zeromq::SimpleThread in test threads. |
| src/test/zeromq/middleware_regex/test.cpp | Use tagged ZeroMQ InterProcessForwarder; formatting tweaks. |
| src/test/zeromq/middleware_basic/test.cpp | Use tagged ZeroMQ InterProcessForwarder. |
| src/test/zeromq/CMakeLists.txt | Add poller_attach_test subdirectory. |
| src/test/middleware/multi_thread_app1/test.cpp | Use impl-specific SimpleThread alias via using. |
| src/test/middleware/middleware_interprocess_forwarder/test.cpp | Switch to impl-specific InterProcessForwarder alias via using. |
| src/moos/middleware/moos_plugin_translator.h | Use goby::zeromq::SimpleThread for translator thread. |
| src/middleware/transport/intervehicle/driver_thread.h | Template ModemDriverThread on implementation tag; update member types. |
| src/middleware/transport/intervehicle/driver_thread.cpp | Implement templated ModemDriverThread and explicitly instantiate for ZMQ/UDPM tags. |
| src/middleware/transport/intervehicle.h | Propagate implementation tag into InterVehiclePortal modem driver thread creation/storage. |
| src/middleware/transport/interthread.h | Add implementation_tag typedef (void) for interthread transporters. |
| src/middleware/transport/interprocess.h | Add ImplementationTag to base/forwarder, compute internal group names from tag, add deprecated default specialization. |
| src/middleware/transport/intermodule.h | Add ImplementationTag to intermodule forwarder/portal base and deprecated default specialization. |
| src/middleware/transport/interface.h | Add PollerInterface::attach() and poll-all support for attached pollers. |
| src/middleware/transport/detail/static_group_names.h | New constexpr helper to concatenate prefix strings into group names. |
| src/middleware/src.cmake | Remove health_monitor_thread.cpp from middleware sources (now header-only/template). |
| src/middleware/io/mavlink/udp.h | Default IO thread type to goby::zeromq::SimpleThread; formatting tweaks. |
| src/middleware/io/mavlink/serial.h | Default IO thread type to goby::zeromq::SimpleThread; formatting tweaks. |
| src/middleware/io/line_based/tcp_server.h | Default IO thread type to goby::zeromq::SimpleThread; formatting tweaks. |
| src/middleware/io/line_based/tcp_client.h | Default IO thread type to goby::zeromq::SimpleThread; formatting tweaks. |
| src/middleware/io/line_based/serial.h | Default IO thread type to goby::zeromq::SimpleThread; formatting tweaks. |
| src/middleware/io/line_based/pty.h | Default IO thread type to goby::zeromq::SimpleThread. |
| src/middleware/io/groups.h | Rename MAVLink group string constants to middleware IO namespace. |
| src/middleware/io/detail/io_transporters.h | Thread/tag propagation updates for interprocess forwarders. |
| src/middleware/io/detail/io_interface.h | Thread/tag propagation updates; formatting tweaks. |
| src/middleware/coroner/health_monitor_thread.h | Make health monitor thread templated on implementation tag; inline implementation. |
| src/middleware/coroner/health_monitor_thread.cpp | Delete old non-templated implementation file. |
| src/middleware/application/simple_thread.h | Add ImplementationTag to SimpleThread; provide deprecated void specialization. |
| src/middleware/application/multi_thread.h | Launch tagged HealthMonitorThread; add StandaloneThread (interthread-only). |
| src/CMakeLists.txt | Treat Boost include dirs as SYSTEM. |
| src/apps/acomms/rockblock_simulator/rockblock_simulator.cpp | Use new StandaloneThread for interthread-only components. |
| src/acomms/modemdriver/iridium_driver.cpp | Suppress Boost deprecation warnings around boost/statechart include. |
| CMakeLists.txt | Remove -Wno-error=deprecated-declarations from debug options. |
| .github/workflows/copilot-setup-steps.yml | Checkout with fetch-depth: 0 to ensure tags are available. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Check that poller isn't attaching itself or the same poller more than once. Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
…ish-commands Add `goby udpm publish` and `goby udpm subscribe` commands
…le layers (#382) * Support array form of interprocess/interthread/intermodule in gen_goby.jl Agent-Logs-Url: https://github.com/GobySoft/goby3/sessions/50f5f12a-fb9f-47f5-9d4c-00ebabcce4f2 Co-authored-by: tsaubergine <732276+tsaubergine@users.noreply.github.com> * Add README.md for Goby.jl Julia support package Agent-Logs-Url: https://github.com/GobySoft/goby3/sessions/0ceeca83-a92e-4a80-b138-c8f93678d9d0 Co-authored-by: tsaubergine <732276+tsaubergine@users.noreply.github.com> * Edit Julia markdown doc --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: tsaubergine <732276+tsaubergine@users.noreply.github.com> Co-authored-by: Toby Schneider <toby@gobysoft.org>
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 75 out of 75 changed files in this pull request and generated 4 comments.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Add tag to interprocess derived transporters to use a different set of goby::middleware::Group depending on the implementation. This allows for two or more interprocess layers to operate in parallel without conflicting on the (shared) inner layer.
Add "attach" feature to PollerInterface to allow polling of multiple PollerInterfaces with one call to poll(). This allows for the creation of Threads/Applications that can use multiple interprocess layer implementations in parallel (e.g. ZeroMQ and UDPM at the same time).