diff options
-rw-r--r-- | lib/evendoors.rb | 2 | ||||
-rw-r--r-- | lib/evendoors/spin.rb | 15 |
2 files changed, 17 insertions, 0 deletions
diff --git a/lib/evendoors.rb b/lib/evendoors.rb index 1f29b4c..19f9371 100644 --- a/lib/evendoors.rb +++ b/lib/evendoors.rb @@ -29,6 +29,7 @@ module EvenDoors ACT_FOLLOW = 'follow'.freeze ACT_ERROR = 'error'.freeze # + SYS_ACT_HIBERNATE = 'hibernate'.freeze SYS_ACT_ADD_LINK = 'sys_add_link'.freeze # LNK_SRC = 'edoors_lnk_src'.freeze @@ -38,6 +39,7 @@ module EvenDoors LNK_CONDV = 'edoors_lnk_condv'.freeze # FIELD_ERROR_MSG = 'edoors_error'.freeze + FIELD_HIBERNATE_PATH= 'hibernate_path'.freeze # ERROR_ROUTE_NS = 'routing error: no source'.freeze ERROR_ROUTE_RRWD = 'routing error: right room, wrong door'.freeze diff --git a/lib/evendoors/spin.rb b/lib/evendoors/spin.rb index 7fb4218..e4f61cf 100644 --- a/lib/evendoors/spin.rb +++ b/lib/evendoors/spin.rb @@ -31,6 +31,7 @@ module EvenDoors @app_fifo = [] # application particles fifo list # @run = false + @hibernate_path = 'evendoors-hibernate-'+n+'.json' @debug_errors = o[:debug_errors]||o['debug_errors']||false @debug_routing = o[:debug_routing]||o['debug_routing']||false # @@ -52,6 +53,7 @@ module EvenDoors def to_json *a { 'kls' => self.class.name, + 'timestamp' => Time.now, 'name' => @name, 'spots' => @spots, 'sys_fifo' => @sys_fifo, @@ -99,6 +101,14 @@ module EvenDoors @sys_fifo << p end # + def process_sys_p p + if p.action==EvenDoors::SYS_ACT_HIBERNATE + hibernate! p[FIELD_HIBERNATE_PATH] + else + super p + end + end + # def spin! @spots.values.each do |spot| spot.start! end @run = true @@ -120,6 +130,11 @@ module EvenDoors @run=false end # + def hibernate! path=nil + stop! + File.open(path||@hibernate_path,'w') do |f| f << JSON.pretty_generate(self) end + end + # end # end |