11
22class Master < Concurrent ::Actor ::RestartingContext
33 def initialize
4- # for listener to be child of master
4+ # create listener a supervised child of master
55 @listener = Listener . spawn ( name : 'listener1' , supervise : true )
66 end
77
@@ -17,7 +17,7 @@ def on_message(msg)
1717 end
1818 end
1919
20- # TODO turn this into Behaviour and make it default part of RestartingContext
20+ # TODO this should be a part of a behaviour, it ensures that children are restarted/paused etc. when theirs parents are
2121 def on_event ( event )
2222 event_name , _ = event
2323 case event_name
@@ -48,25 +48,25 @@ def on_message(msg)
4848end
4949
5050master = Master . spawn ( name : 'master' , supervise : true )
51- # => #<Concurrent::Actor::Reference:0x7fd443366568 /master (Master)>
51+ # => #<Concurrent::Actor::Reference:0x7fa595899fa8 /master (Master)>
5252listener = master . ask! ( :listener )
53- # => #<Concurrent::Actor::Reference:0x7fd44335cf68 /master/listener1 (Listener)>
54- listener . ask! ( :number ) # => 20
55-
53+ # => #<Concurrent::Actor::Reference:0x7fa5958909d0 /master/listener1 (Listener)>
54+ listener . ask! ( :number ) # => 12
55+ # crash the listener which is supervised by master, it's restarted automatically reporting a different number
5656listener . tell ( :crash )
57- # => #<Concurrent::Actor::Reference:0x7fd44335cf68 /master/listener1 (Listener)>
58- listener . ask! ( :number ) # => 41
57+ # => #<Concurrent::Actor::Reference:0x7fa5958909d0 /master/listener1 (Listener)>
58+ listener . ask! ( :number ) # => 65
5959
6060master << :crash
61- # => #<Concurrent::Actor::Reference:0x7fd443366568 /master (Master)>
61+ # => #<Concurrent::Actor::Reference:0x7fa595899fa8 /master (Master)>
6262
6363sleep 0.1 # => 0
6464
65- # ask for listener again, old one is terminated
65+ # ask for listener again, old one is terminated with master and replaced with new one
6666listener . ask! ( :terminated? ) # => true
6767listener = master . ask! ( :listener )
68- # => #<Concurrent::Actor::Reference:0x7fd4433357b0 /master/listener1 (Listener)>
69- listener . ask! ( :number ) # => 12
68+ # => #<Concurrent::Actor::Reference:0x7fa5970d5608 /master/listener1 (Listener)>
69+ listener . ask! ( :number ) # => 77
7070
7171master . ask! ( :terminate! ) # => [[true], true]
7272
0 commit comments