File: skip_messages.cpp

package info (click to toggle)
actor-framework 0.17.6-3.2
  • links: PTS
  • area: main
  • in suites: forky, sid
  • size: 9,008 kB
  • sloc: cpp: 77,684; sh: 674; python: 309; makefile: 13
file content (47 lines) | stat: -rw-r--r-- 1,313 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include "caf/all.hpp"

using namespace caf;

behavior server(event_based_actor* self) {
  self->set_default_handler(skip);
  return {
    [=](idle_atom, const actor& worker) {
      self->become(keep_behavior, [=](ping_atom atm) {
        self->delegate(worker, atm);
        self->unbecome();
      });
    },
  };
}

behavior client(event_based_actor* self, const actor& serv) {
  self->link_to(serv);
  self->send(serv, idle_atom_v, self);
  return {
    [=](ping_atom) {
      self->send(serv, idle_atom_v, self);
      return pong_atom_v;
    },
  };
}

void caf_main(actor_system& system) {
  auto serv = system.spawn(server);
  auto worker = system.spawn(client, serv);
  scoped_actor self{system};
  self->request(serv, std::chrono::seconds(10), ping_atom_v)
    .receive(
      [&](pong_atom) {
        aout(self) << "received response from "
                   << (self->current_sender() == worker ? "worker\n"
                                                        : "server\n");
      },
      [&](error& err) {
        aout(self) << "received error " << to_string(err) << " from "
                   << (self->current_sender() == worker ? "worker\n"
                                                        : "server\n");
      });
  self->send_exit(serv, exit_reason::user_shutdown);
}

CAF_MAIN()