Skip to content

3.0 interprocess implementation tag#380

Merged
tsaubergine merged 23 commits into3.0from
3.0-interprocess-implementation-tag
Apr 10, 2026
Merged

3.0 interprocess implementation tag#380
tsaubergine merged 23 commits into3.0from
3.0-interprocess-implementation-tag

Conversation

@tsaubergine
Copy link
Copy Markdown
Member

@tsaubergine tsaubergine commented Apr 9, 2026

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).

tsaubergine and others added 18 commits April 9, 2026 12:29
…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
…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>
…-instances

Add attach_poller() to PollerInterface + unit test (ZMQ + UDPM)
…tag-template-parameter

Finalize ImplementationTag template parameter for InterProcessTransporterBase
@tsaubergine tsaubergine requested a review from Copilot April 9, 2026 09:25
@tsaubergine tsaubergine marked this pull request as ready for review April 9, 2026 09:26
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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 ImplementationTag plumbing through middleware interprocess/intermodule base classes and expose tagged InterProcessForwarder / InterModuleForwarder and tagged SimpleThread aliases 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.

tsaubergine and others added 5 commits April 9, 2026 19:38
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>
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

@tsaubergine tsaubergine merged commit a5c36b6 into 3.0 Apr 10, 2026
10 checks passed
@tsaubergine tsaubergine deleted the 3.0-interprocess-implementation-tag branch April 10, 2026 05:23
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants