| CODENOTIFIER | HelpYou are not signed inSign in |
Project: Revactor
Revision: 126
Author: tarcieri
Date: 02 Apr 2008 16:46:23
Changes:Ring and trap exit examples
Files:| ... | ...@@ -0,0 +1,33 @@ | |
| 1 | require 'revactor' | |
| 2 | ||
| 3 | NCHILDREN = 5 | |
| 4 | NAROUND = 5 | |
| 5 | ||
| 6 | class RingNode | |
| 7 | extend Actorize | |
| 8 | ||
| 9 | def initialize(next_node) | |
| 10 | loop do | |
| 11 | Actor.receive do |filter| | |
| 12 | filter.when(Object) do |msg| | |
| 13 | puts "#{Actor.current} got #{msg}" | |
| 14 | next_node << msg | |
| 15 | end | |
| 16 | end | |
| 17 | end | |
| 18 | end | |
| 19 | end | |
| 20 | ||
| 21 | next_node = Actor.current | |
| 22 | NCHILDREN.times { next_node = RingNode.spawn(next_node) } | |
| 23 | ||
| 24 | next_node << NAROUND | |
| 25 | ||
| 26 | loop do | |
| 27 | Actor.receive do |filter| | |
| 28 | filter.when(Object) do |n| | |
| 29 | exit if n.zero? | |
| 30 | next_node << n - 1 | |
| 31 | end | |
| 32 | end | |
| 33 | end | |
| 0 | 34 | \ No newline at end of file |
| ... | ...@@ -0,0 +1,12 @@ | |
| 1 | require 'revactor' | |
| 2 | ||
| 3 | actor = Actor.spawn_link do | |
| 4 | Actor.receive do |filter| | |
| 5 | filter.when(:die) { raise "Aieeee!" } | |
| 6 | end | |
| 7 | end | |
| 8 | ||
| 9 | Actor.current.trap_exit = true | |
| 10 | ||
| 11 | actor << :die | |
| 12 | p Actor.receive { |filter| filter.when(Object) { |msg| msg } } |