module Flic::Client::Features::Ping
Public Class Methods
new(*)
click to toggle source
Calls superclass method
# File lib/flic/client/features/ping.rb, line 9 def initialize(*) @ping_id_callback_semaphore = Mutex.new @ping_id_callback = {} super end
Public Instance Methods
ping(callback = Proc.new)
click to toggle source
# File lib/flic/client/features/ping.rb, line 16 def ping(callback = Proc.new) ping_id = alloc_ping_id_with_callback(callback) send_command Protocol::Commands::Ping.new(ping_id: ping_id) end
Private Instance Methods
alloc_ping_id_with_callback(callback)
click to toggle source
# File lib/flic/client/features/ping.rb, line 24 def alloc_ping_id_with_callback(callback) @ping_id_callback_semaphore.synchronize do ping_id = nil loop do ping_id = rand(2**32) break unless @ping_id_callback.has_key?(ping_id) end @ping_id_callback[ping_id] = callback ping_id end end
handle_event(event)
click to toggle source
Calls superclass method
# File lib/flic/client/features/ping.rb, line 40 def handle_event(event) case event when Protocol::Events::PingResponse callback = @ping_id_callback_semaphore.synchronize do @ping_id_callback.delete event.ping_id end callback.call if callback else super end end