lib/metacosm/simulation.rb in metacosm-0.1.8 vs lib/metacosm/simulation.rb in metacosm-0.2.0
- old
+ new
@@ -1,8 +1,37 @@
module Metacosm
class Simulation
+ attr_accessor :running
def watch(model)
Frappuccino::Stream.new(model).on_value(&method(:receive))
+ end
+
+ def fire(command)
+ command_queue.push(command)
+ end
+
+ def command_queue
+ @command_queue ||= Queue.new
+ end
+
+ def conduct!
+ @running = true
+ @conductor_thread = Thread.new { execute }
+ end
+
+ def execute
+ while @running
+ if (command=command_queue.pop)
+ # p [ :applying!, command: command ]
+ apply(command)
+ end
+ sleep 0.01
+ end
+ end
+
+ def halt!
+ @running = false
+ @conductor_thread.terminate
end
def apply(command)
handler_for(command).handle(command.attrs)
end