Skip to content

Goby3Sketches

Toby Schneider edited this page Aug 16, 2016 · 5 revisions

Architectural

  • Requires C++11
  • No goby_moos?
  • Not entirely compatible with Goby2

Big Ideas

  • Publication scopes. Is this done at the publish or subscribe level? Or only for RPC (request/reply)? Perhaps the publications "flow outwards" from inner (intraprocess) to outer scope (interplatform) depending on the existing subscriptions

    • publish(intraprocess), e.g. interthread comms
    • publish(intraplatform, aka interprocess), e.g. UNIX sockets, TCP
    • publish(interplatform), e.g. Goby ModemDriver
  • Subscriptions at interplatform level: time interval between publications or priority level - tie this into Queue priority ideas?

  • Subscription scope forwarded: For a fully qualified subscription (e.g. type, group, vehicle specified for InterPlatform or type, group, process for InterProcess), the subscription is forwarded into that scope and future publications are forwarded to the outer scope.

  • Request/Reply infrastructure that acts in parallel to the pub/sub

Reworkings

  • Use enumerations for "groups" instead of strings - only at interplatform level
  • Change wire protocol from /[uint32]MARSHALLING_SCHEME/[string]group/[string]protobuf-name to

[uint32]MARSHALLING_SCHEME[uint32]group-enum[uint32]protobuf-type-hash/dccl id?

  • Implement database logging with DBO using protobuf plugin to generate the required methods. Is this even possible?

    • Or, skip DBO and write SQL directly from introspection or generated code.
  • Redo application / zeromq_application to remove loop() method and instead add ability to register synchronous events (similar to subscribe, but with time based event).

Cleanups, reductions

  • Rewrite linebasedcomms

    • Simplify interface
    • Fix asio loop to not buffer data, just call async_read_until repeatedly - this is done in 2.1-improve-iridium-driver
    • use boost::circular_buffer instead of vector for storing data
  • goby::util::as

    • Can this compile faster? C++11 features?
  • Goby Queue needs a rewrite

  • No DCCL 1 or 2 compatibility , only native DCCL3

  • glog, simplify ala DCCL Logger

  • Version >= 1.48 of boost (version shipped with precise)

  • What dependencies can we get rid of?

    • libboost-system-dev: need, used by ASIO
    • libboost-date-time-dev: possibly get rid of, can we use std::chrono instead? What about fake time (timewarp, etc.)?
    • libboost-thread-dev: use std::thread?
    • libboost-program-options-dev: use getopt.h?
    • libboost-filesystem-dev: use realpath.h?
    • libboost-signals-dev: use signals2, header only (isn't this the case in goby2? - perhaps used by Wt)
    • Wt: perhaps a python framework, Flask or Django?
    • NCurses: maybe we don't need the ncurses gui
    • Protobuf: Keep
    • ZeroMQ: Keep