Sha256: a744d0ee3087c6f10b55cf26d8e1641ade90c1964e364f456ad80982f164b06d
Contents?: true
Size: 1.44 KB
Versions: 2
Compression:
Stored size: 1.44 KB
Contents
# -*- encoding: utf-8 -*- module Bluepill class Trigger @implementations = {} def self.inherited(klass) @implementations[klass.name.split('::').last.underscore.to_sym] = klass end def self.[](name) @implementations[name] end attr_accessor :process, :logger, :mutex, :scheduled_events def initialize(process, options = {}) self.process = process self.logger = options[:logger] self.mutex = Mutex.new self.scheduled_events = [] end def reset! self.cancel_all_events end def notify(transition) raise "Implement in subclass" end def dispatch!(event) self.process.dispatch!(event, self.class.name.split("::").last) end def schedule_event(event, delay) # TODO: maybe wrap this in a ScheduledEvent class with methods like cancel thread = Thread.new(self) do |trigger| begin sleep delay.to_f trigger.dispatch!(event) trigger.mutex.synchronize do trigger.scheduled_events.delete_if { |_, thread| thread == Thread.current } end rescue StandardError => e trigger.logger.exception(e) end end self.scheduled_events.push([event, thread]) end def cancel_all_events self.logger.info "Canceling all scheduled events" self.mutex.synchronize do self.scheduled_events.each {|_, thread| thread.kill} end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
kostya-bluepill-0.0.60.2 | lib/bluepill/trigger.rb |
kostya-bluepill-0.0.60.1 | lib/bluepill/trigger.rb |