class LIFX::LAN::Site
@api private
Constants
- STALE_GATEWAY_CHECK_INTERVAL
Attributes
gateways[R]
id[R]
tag_manager[R]
Public Class Methods
new(id: required!(:id))
click to toggle source
# File lib/lifx/lan/site.rb, line 18 def initialize(id: required!(:id)) @id = id @gateways = {} @gateways_mutex = Mutex.new @threads = [] @threads << initialize_timer_thread initialize_stale_gateway_check end
Public Instance Methods
flush(**options)
click to toggle source
# File lib/lifx/lan/site.rb, line 50 def flush(**options) @gateways.values.map do |gateway| Thread.start do gateway.flush(**options) end end.each(&:join) end
handle_message(message, ip, transport)
click to toggle source
# File lib/lifx/lan/site.rb, line 34 def handle_message(message, ip, transport) logger.debug("<- #{self} #{transport}: #{message}") payload = message.payload case payload when Protocol::Device::StateService @gateways_mutex.synchronize do @gateways[message.device_id] ||= GatewayConnection.new @gateways[message.device_id].handle_message(message, ip, transport) @gateways[message.device_id].add_observer(self, :message_received) do |**args| notify_observers(:message_received, **args) end end end seen! end
observer_callback_definition()
click to toggle source
# File lib/lifx/lan/site.rb, line 72 def observer_callback_definition { message_received: -> (message: nil, ip: nil, transport: nil) {} } end
stop()
click to toggle source
# File lib/lifx/lan/site.rb, line 63 def stop @threads.each do |thread| thread.abort end @gateways.values.each do |gateway| gateway.close end end
to_s()
click to toggle source
# File lib/lifx/lan/site.rb, line 58 def to_s %Q{#<LIFX::LAN::Site id=#{id}>} end
Also aliased as: inspect
write(message)
click to toggle source
# File lib/lifx/lan/site.rb, line 27 def write(message) message.path.site_id = id @gateways.values.each do |gateway| gateway.write(message) end end
Protected Instance Methods
initialize_stale_gateway_check()
click to toggle source
# File lib/lifx/lan/site.rb, line 82 def initialize_stale_gateway_check timers.every(STALE_GATEWAY_CHECK_INTERVAL) do @gateways_mutex.synchronize do stale_gateways = @gateways.select do |k, v| !v.connected? end stale_gateways.each do |id, _| logger.info("#{self}: Dropping stale gateway id #{id}") @gateways.delete(id) end end end end