Skip to content

Instantly share code, notes, and snippets.

@zzxx-husky
Created April 19, 2018 12:41
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save zzxx-husky/32c26386ffbce583a30f561eda6896bf to your computer and use it in GitHub Desktop.
Save zzxx-husky/32c26386ffbce583a30f561eda6896bf to your computer and use it in GitHub Desktop.
An example to send messages among actors on different actor systems
#include "caf/all.hpp"
#include "caf/io/middleman.hpp"
using namespace caf;
class Master : public caf::event_based_actor {
public:
caf::actor inner;
Master(caf::actor_config &cfg, caf::actor inner) : event_based_actor(cfg) {
this->inner = inner;
this->send(inner, std::string("hello"));
}
caf::behavior make_behavior() override {
return {
[=](std::string world) {
std::cout << "receive world" << std::endl;
},
[&](caf::actor other_inner) {
this->send(this->inner, other_inner);
std::cout << to_string(other_inner.address()) << std::endl;
}
};
}
};
class Inner : public caf::event_based_actor {
public:
Inner(caf::actor_config &cfg) : event_based_actor(cfg) {}
caf::behavior make_behavior() override {
return {
[=](std::string hello) {
return std::string("world");
},
[=](caf::actor other) {
std::cout << "sending secret" << std::endl;
this->send(other, 31415926);
}
};
}
};
int main(int argc, char **argv) {
caf::actor_system_config cfg;
cfg.load<caf::io::middleman>();
caf::actor_system sys{cfg};
caf::actor_system sys2{cfg};
caf::actor inner = sys2.spawn<Inner>();
caf::actor master = sys.spawn<Master>(inner);
sys.middleman().publish(master, 12341);
}
#include "caf/all.hpp"
#include "caf/io/middleman.hpp"
using namespace caf;
class Worker : public caf::event_based_actor {
public:
caf::actor master, inner;
Worker(caf::actor_config &cfg, caf::actor master, caf::actor inner) : event_based_actor(cfg) {
this->master = master;
this->inner = inner;
this->send(inner, std::string("Hello"));
}
caf::behavior make_behavior() override {
return {
[=](std::string world) {
std::cout << caf::to_string(inner.address()) << std::endl;
this->send(master, inner);
}
};
}
};
class Inner : public caf::event_based_actor {
public:
Inner(caf::actor_config &cfg) : event_based_actor(cfg) {}
caf::behavior make_behavior() override {
return {
[=](std::string hello) {
return std::string("world");
},
[=](int secret) {
std::cout << secret << std::endl;
}
};
}
};
int main(int argc, char **argv) {
caf::actor_system_config cfg;
cfg.load<caf::io::middleman>();
caf::actor_system sys{cfg};
caf::actor_system sys2{cfg};
caf::actor inner = sys2.spawn<Inner>();
caf::actor master = sys.middleman().remote_actor<caf::actor>("127.0.0.1", 12341).value();
caf::actor worker = sys.spawn<Worker>(master, inner);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment