Commit 26bb9cda authored by Dominik Charousset's avatar Dominik Charousset

Allow 'testing' multiplexer backend option

parent 27f564bb
......@@ -164,6 +164,11 @@ public:
inline_next_runnables(1);
}
/// Resets the counter for the next inlined runnables.
inline void reset_inlining() {
inline_runnables_ = 0;
}
/// Installs a callback that is triggered on the next inlined runnable.
inline void after_next_inlined_runnable(std::function<void()> f) {
inline_runnable_callback_ = std::move(f);
......
......@@ -47,6 +47,7 @@
#include "caf/io/system_messages.hpp"
#include "caf/io/network/interfaces.hpp"
#include "caf/io/network/test_multiplexer.hpp"
#include "caf/io/network/default_multiplexer.hpp"
#include "caf/scheduler/abstract_coordinator.hpp"
......@@ -71,10 +72,12 @@
namespace caf {
namespace io {
actor_system::module* middleman::make(actor_system& sys, detail::type_list<>) {
class impl : public middleman {
public:
impl(actor_system& ref) : middleman(ref), backend_(&ref) {
namespace {
template <class T>
class mm_impl : public middleman {
public:
mm_impl(actor_system& ref) : middleman(ref), backend_(&ref) {
// nop
}
......@@ -82,27 +85,23 @@ actor_system::module* middleman::make(actor_system& sys, detail::type_list<>) {
return backend_;
}
private:
network::default_multiplexer backend_;
};
# ifdef CAF_USE_ASIO
class asio_impl : public middleman {
public:
asio_impl(actor_system& ref) : middleman(ref), backend_(&ref) {
// nop
}
private:
T backend_;
};
network::multiplexer& backend() override {
return backend_;
}
} // namespace <anonymous>
private:
network::asio_multiplexer backend_;
};
if (sys.config().middleman_network_backend == atom("asio"))
return new asio_impl(sys);
actor_system::module* middleman::make(actor_system& sys, detail::type_list<>) {
switch (atom_uint(sys.config().middleman_network_backend)) {
# ifdef CAF_USE_ASIO
case atom_uint(atom("asio")):
return new mm_impl<network::asio_multiplexer>(sys);
# endif // CAF_USE_ASIO
return new impl(sys);
case atom_uint(atom("testing")):
return new mm_impl<network::test_multiplexer>(sys);
default:
return new mm_impl<network::default_multiplexer>(sys);
}
}
middleman::middleman(actor_system& sys) : system_(sys) {
......@@ -403,6 +402,9 @@ void middleman::stop() {
}
void middleman::init(actor_system_config& cfg) {
// never detach actors when using the testing multiplexer
if (cfg.middleman_network_backend == atom("testing"))
cfg.middleman_detach_utility_actors = false;
// add remote group module to config
struct remote_groups : group_module {
public:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment