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
inspect()
Alias for: to_s
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