From cf576b6d6232d06c0a7f6da5d9a67698bd031eb3 Mon Sep 17 00:00:00 2001 From: Tony Arcieri Date: Wed, 2 Apr 2008 20:46:23 +0000 Subject: [PATCH] Ring and trap exit examples --- examples/ring.rb | 33 +++++++++++++++++++++++++++++++++ examples/trap_exit.rb | 12 ++++++++++++ 2 files changed, 45 insertions(+) create mode 100644 examples/ring.rb create mode 100644 examples/trap_exit.rb diff --git a/examples/ring.rb b/examples/ring.rb new file mode 100644 index 0000000..09bef0e --- /dev/null +++ b/examples/ring.rb @@ -0,0 +1,33 @@ +require 'revactor' + +NCHILDREN = 5 +NAROUND = 5 + +class RingNode + extend Actorize + + def initialize(next_node) + loop do + Actor.receive do |filter| + filter.when(Object) do |msg| + puts "#{Actor.current} got #{msg}" + next_node << msg + end + end + end + end +end + +next_node = Actor.current +NCHILDREN.times { next_node = RingNode.spawn(next_node) } + +next_node << NAROUND + +loop do + Actor.receive do |filter| + filter.when(Object) do |n| + exit if n.zero? + next_node << n - 1 + end + end +end \ No newline at end of file diff --git a/examples/trap_exit.rb b/examples/trap_exit.rb new file mode 100644 index 0000000..169572a --- /dev/null +++ b/examples/trap_exit.rb @@ -0,0 +1,12 @@ +require 'revactor' + +actor = Actor.spawn_link do + Actor.receive do |filter| + filter.when(:die) { raise "Aieeee!" } + end +end + +Actor.current.trap_exit = true + +actor << :die +p Actor.receive { |filter| filter.when(Object) { |msg| msg } }