summaryrefslogtreecommitdiffstats
path: root/examples/links.rb
diff options
context:
space:
mode:
authorJérémy Zurcher <jeremy@asynk.ch>2012-06-28 14:48:01 +0200
committerJérémy Zurcher <jeremy@asynk.ch>2012-06-28 14:48:01 +0200
commit77ea8b7e2db38877bc9e48336778b3d6906791b5 (patch)
treeb302a0a4f0385fefe1988c3dbea0f171a4403b06 /examples/links.rb
parent538531d644f43d99d3da6bb9103b5bfcd8ef4cd6 (diff)
downloadedoors-ruby-77ea8b7e2db38877bc9e48336778b3d6906791b5.zip
edoors-ruby-77ea8b7e2db38877bc9e48336778b3d6906791b5.tar.gz
examles links: is JSON ready now
Diffstat (limited to 'examples/links.rb')
-rw-r--r--examples/links.rb34
1 files changed, 30 insertions, 4 deletions
diff --git a/examples/links.rb b/examples/links.rb
index b21a2e4..c5d80f5 100644
--- a/examples/links.rb
+++ b/examples/links.rb
@@ -6,16 +6,29 @@
# run this script which builds the example system and spin it untill it's empty:
# $ ruby -Ilib examples/links.rb
#
+# or load the system from a JSON specification ( created with dom0.hibernate! )
+# $ ruby -Ilib -r ./examples/links.rb bin/edoors.rb examples/links.json
+#
+#
require 'edoors'
#
class FileReader < Edoors::Door
#
- def initialize n, p, path
+ def initialize n, p, path=nil
super n, p
- @file = File.open(path,'r')
+ @filepath = path
+ end
+ #
+ def hibernate!
+ {'filepath'=>@filepath}
+ end
+ #
+ def resume! o
+ @filepath = o['filepath']
end
#
def start!
+ @file = File.open(@filepath,'r')
# stimulate myself on system boot up
send_p require_p(Edoors::Particle), Edoors::ACT_GET
end
@@ -29,7 +42,7 @@ class FileReader < Edoors::Door
# see Room#_send and Room#_try_links
send_p p
# stimulate myself
- start!
+ send_p require_p(Edoors::Particle), Edoors::ACT_GET
end
end
#
@@ -52,11 +65,19 @@ end
#
class OutputDoor < Edoors::Door
#
- def initialize n, p, t
+ def initialize n, p, t=nil
super n, p
@title = t
end
#
+ def hibernate!
+ {'title'=>@title}
+ end
+ #
+ def resume! o
+ @title = o['title']
+ end
+ #
def receive_p p
if p.action!=Edoors::ACT_ERROR
p = p.get_data('person')
@@ -90,6 +111,11 @@ if $0 == __FILE__
# schedule the spinning particles untill the system cools down
dom0.spin!
#
+ # you can save the system state after it's run,
+ # but to be able to use it to bootstrap, the hibernation attribute must be set to false
+ # otherwise start! method is not called
+ dom0.hibernate! 'links.json'
+ #
end
#
# EOF