47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
|
# File 'app/models/extface/driver.rb', line 47
def push(buffer)
if @job
wait_on_queue = 2 if current_device_job = device.jobs(true).active.try(:first)
if current_device_job != @job
wait_on_queue = 20 p "#### current_job is not first_on_queue"
end
end
begin
Timeout.timeout(Extface.device_timeout) do
Extface.redis_block do |r|
r.subscribe(@job.id) do |on| on.subscribe do |channel, subscriptions|
@job.rpush buffer
logger.debug "--> #{buffer.bytes.map{ |b| '%02X' % b }.join(' ')}" if development?
end
on.message do |event, data|
r.unsubscribe
@job.connected!
end
end
end
end
rescue Timeout::Error
(wait_on_queue -= 1) > 0 ? retry : raise("Timeout waiting on queue") end
else
raise "No job given"
end
end
|