Event loop friendly C++ actor micro-framework

Ivan Baidakou 8a42f7e26b Update docs 5 years ago
cmake c84c205260 Use more modern cmake practices 5 years ago
docs 29fd5154a6 Update docs 5 years ago
doxygen @ e7f4ec87f0 8a42f7e26b Update docs 5 years ago
examples 3d76d72158 A bettter code 5 years ago
include fad8d61b2f more correctly forward message args 5 years ago
src 95e9930f74 Introduce supervisor policy 5 years ago
tests 7f6c6b46c5 reformat tests, add common usage test case for the registry 5 years ago
.clang-format 84ad618913 Add ..clang-format 6 years ago
.gitmodules 13261fe381 update submoudule url 6 years ago
.travis.yml 8bde204044 fix travis 5 years ago
CMakeLists.txt c01be5be8a More correct usage of Boost_INCLUDE_DIRS 5 years ago
LICENSE ae9faa2b0c Moar docs 6 years ago
README.md 29fd5154a6 Update docs 5 years ago
appveyor.yml 99bf636dcb msvc fix attempt (boost::asio) 6 years ago

README.md

Rotor

rotor is event loop friendly C++ actor micro framework.

Travis Build status codecov license

features

  • minimalistic loop agnostic core
  • various event loops supported (wx, boost-asio, ev) or planned (uv, gtk, etc.)
  • asynchornous message passing interface
  • MPMC (multiple producers mupltiple consumers) messaging, aka pub-sub
  • cross-platform (windows, macosx, linux)
  • inspired by The Reactive Manifesto and sobjectizer

license

MIT

documentation

Please read tutorial, design principles and manual here

Changelog

0.08 (12-Apr-2020)

  • [bugfix] message's arguments are more correctly forwarded
  • [bugfix] actor's arguments are more correctly forwarded in actor's creation inrotor::supervisor_t and rotor::asio::supervisor_asio_t
  • [bugfix] rotor::asio::forwarder_t now more correctly dispatches boost::asio events to actor methods; e.g. it works correctly now with async_accept method of socket_acceptor

0.07 (02-Apr-2020)

  • [improvement] more modern cmake usage

0.06 (09-Nov-2019)

  • [improvement] registy actor was added to allow via name/address runtime matching do services discovery
  • [improvement, breaking] minor changes in supervisor behavior: now it is considered initialied when all its children confirmed initialization
  • [improvement] supervisor_policy_t was introduced to control supervisor behavior on a child-actor startup failure
  • [example] examples/ev/pong-registry.cpp how to use registry
  • [doc] patterns/Registry was added

0.05 (22-Sep-2019)

  • [improvement] response can be inherited from rotor::arc_base, to allow forwarding requests without copying it (i.e. just intrusive pointer is created)
  • [example] examples/boost-asio/beast-scrapper.cpp has been added; it demonstrates an app with pool of actor workers with request-response forwarding

0.04 (14-Sep-2019)

  • [improvement] the request-response approach is integrated to support basic reliable messaging: response notification failure will be delivered, if the expected response will not arrive in-time
  • [improvement] lambda subscribiers are supported
  • [improvement] actor behavior has been introduced to offload actor's interface
  • [breaking] supervisor is constructed with help of supervisor_config_t, which contains shutdown timeout value
  • [breaking] supervisor does not spawns timeout timer for overall shutdown procedure, instead per-child timers are spawned. The root supervisor the same way monitors child-supervisor shut down
  • [breaking] supervisor create_actor method now takes child max init time value. If it does not confirm, the child actor will be asked for shut down.
  • [breaking] shutdown request sent to an child actor now timeout-tracked by supervisor. The message type has changed to message::shutdown_request_t
  • [breaking] init request sent to an child actor now timeout-tracked by supervisor. The message type has changed to message::init_request_t
  • [breaking] actor's state request message type now message::state_request_t, which follows the generic request/response pattern. The response type is now message::state_response_t.
  • [breaking] {asio, ev, ws} supervisor configs are renamed to have corresponding suffix.

0.03 (25-Aug-2019)

  • [improvement] locality notion was introduced, which led to possibilty to build superving trees, see blog-cpp-supervisors
  • [breaking] the outbound field in rotor::supervisor_t was renamed just to queue
  • [breaking] rotor::address_t now contains const void* locality
  • [breaking] rotor::asio::supervisor_config_t now contains std::shared_ptr to strand, instead of creating private strand for each supervisor
  • [bugfix] redundant do_start() method in rotor::supervisor_t was removed, since supervisor now is able to start self after compliting initialization.
  • [bugfix] rotor::supervisor_t sends initialize_actor_t to self to advance own state to INITIALIZED via common actor mechanism, instead of changeing state directly on early initialization phase (do_initialize)
  • [bugfix] rotor::asio::forwarder_t now more correctly dispatches boost::asio events to actor methods
  • [bugfix] rotor::ev::supervisor_ev_t properly handles refcounter

0.02 (04-Aug-2019)

  • Added libev support

0.01 (24-Jul-2019)

Initial version