项目作者: anqurvanillapy

项目描述 :
Erlang-like lightweight C++ actor framework
高级语言: C++
项目地址: git://github.com/anqurvanillapy/libscoa.git
创建时间: 2017-02-03T11:47:42Z
项目社区:https://github.com/anqurvanillapy/libscoa

开源协议:MIT License

下载


libscoa

Scoa: Self-cultivation of actors.

libscoa is a toy actor model runtime in C++17.

Usage

  • hello.cc prints Hello, world! to screen.
  1. #include "libscoa.h"
  2. class foo_be : public scoa::actor_be<foo_be> {
  3. public:
  4. auto
  5. be()
  6. {
  7. return scoa::match{
  8. [&] {
  9. scoa::asio::printf("Hello, world!\n");
  10. stop();
  11. }
  12. };
  13. }
  14. };
  15. int
  16. main()
  17. {
  18. scoa::ctx ctx;
  19. foo_be foo;
  20. ctx.spawn_dispatch("foo", &foo_be);
  21. ctx.start();
  22. return 0;
  23. }
  • pingpong.cc performs ping-pong playing.
  1. #include "libscoa.h"
  2. class pinger : public scoa::actor_be<pinger> {
  3. public:
  4. auto
  5. be()
  6. {
  7. return scoa::match{
  8. [&] (scoa::ion_t) {
  9. // ion_t is atom message type.
  10. if (i_) {
  11. send("pong", "ball"_ion);
  12. --i_;
  13. } else {
  14. send("pong", 0);
  15. }
  16. },
  17. [&] (auto&&) {
  18. stop();
  19. }
  20. };
  21. }
  22. private:
  23. int i_{42}; // 42 balls
  24. };
  25. class ponger : public scoa::actor_be<ponger> {
  26. public:
  27. auto
  28. be()
  29. {
  30. return scoa::match{
  31. [&] (scoa::ion_t) {
  32. send("ping", "ball"_ion);
  33. },
  34. [&] (auto&&) {
  35. send("ping", 0);
  36. stop();
  37. }
  38. };
  39. }
  40. };
  41. int
  42. main()
  43. {
  44. scoa::ctx ctx;
  45. pinger ping;
  46. ponger pong;
  47. ctx.spawn_dispatch("ping", &ping, "ball"_ion);
  48. ctx.spawn("pong", &pong);
  49. ctx.start();
  50. return 0;
  51. }

License

MIT