class Evesync::Trigger
Attributes
remote_handlers[R]
Public Class Methods
new(watcher_queue)
click to toggle source
# File lib/evesync/trigger.rb, line 10 def initialize(watcher_queue) @watcher_queue = watcher_queue # Local Data daemon evedatad = IPC::Client.new(port: :evedatad) @remote_handlers = Config[:evemond]['remotes'].map do |ip| new_remote_handler(ip) end.compact # remove nils # Helper triggers package_trigger = Trigger::Package.new( db: evedatad, remotes: @remote_handlers ) file_trigger = Trigger::File.new( db: evedatad, remotes: @remote_handlers ) @triggers = [package_trigger, file_trigger] Log.debug('Trigger initialization done!') end
Public Instance Methods
add_remote_node(ip)
click to toggle source
# File lib/evesync/trigger.rb, line 56 def add_remote_node(ip) unless @remote_handlers.find { |h| h.ip == ip } remote_handler = new_remote_handler(ip) @remote_handlers << remote_handler if remote_handler end Log.debug 'Trigger actual remote nodes:', @remote_handlers.map(&:ip) end
ignore(change)
click to toggle source
# File lib/evesync/trigger.rb, line 48 def ignore(change) trigger_method(:ignore, change) end
start()
click to toggle source
# File lib/evesync/trigger.rb, line 36 def start @thr = Thread.new do loop { biz } end Log.debug('Trigger started') end
stop()
click to toggle source
# File lib/evesync/trigger.rb, line 43 def stop @thr.exit Log.debug('Trigger stopped') end
unignore(change)
click to toggle source
# File lib/evesync/trigger.rb, line 52 def unignore(change) trigger_method(:unignore, change) end
Private Instance Methods
biz()
click to toggle source
Main thread business logic goes here
# File lib/evesync/trigger.rb, line 69 def biz change = @watcher_queue.pop Log.info "Trigger dequed event: #{change}" trigger = message_trigger(change) trigger.process(change) end
message_trigger(message)
click to toggle source
# File lib/evesync/trigger.rb, line 91 def message_trigger(message) class_last = message.class.name.to_s.split('::')[-1] @triggers.find do |trigger| trigger.to_s.include? class_last end end
new_remote_handler(ip)
click to toggle source
# File lib/evesync/trigger.rb, line 98 def new_remote_handler(ip) unless Utils.local_ip?(ip) IPC::Client.new( port: :evehand, ip: ip ) end end
trigger_method(method, change)
click to toggle source
Send a method to target (choose by change class name)
# File lib/evesync/trigger.rb, line 77 def trigger_method(method, change) Log.debug("Trigger calling '#{method}' on '#{change.class.name}'") trigger = message_trigger(change) if trigger trigger.send(method, change) && true else # TODO: forward somewhere Log.error('Trigger: no watchers will be notified on ' \ "#{change}") end end