Class: Extface::HandlerController

Inherits:
ApplicationController show all
Includes:
ActionController::Live
Defined in:
app/controllers/extface/handler_controller.rb

Instance Method Summary collapse

Methods inherited from ApplicationController

#extfaceable, #index

Instance Method Details

#pullObject



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'app/controllers/extface/handler_controller.rb', line 11

def pull
  # request.body.read usable? : YES! return number of bytes received by device
  unless device.present?
    render nothing: true, status: :not_found
  else
    response.headers['Content-Type'] = 'text/event-stream'
    # find current job or get new one
    Extface.redis_block do |r|
        start = Time.now
        if job = device.jobs.active.find_by(id: cookies[:extface]) || device.jobs.active.try(:first)
          cookies.permanent[:extface] = job.id
          p "Processing job #{job.id}"
          list, data = r.blpop(job.id, timeout: 1)
          while data
            response.stream.write data
            r.publish(job.id, "OK")
            if (Time.now - start) > 3.seconds
              p "Will continue next time"
              #break
            end
            list, data = r.blpop(job.id, timeout: 1)
          end
        end
    end #redis block
  end
rescue => e
  p e.message
  render nothing: true, status: :internal_server_error
ensure
  response.stream.close
end

#pushObject



43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# File 'app/controllers/extface/handler_controller.rb', line 43

def push
  # get  request.body.read
  # if it is push message, process it
  response.headers['Content-Type'] = 'text/event-stream'
  p request.body.read
  Extface.redis.subscribe(:alabala) do |on|
    on.message do |event, data|
      response.stream.write("event: #{event} data: #{data}\n\n")
      Extface.redis.unsubscribe
    end
  end
  response.stream.write "finish\n"
ensure
  response.stream.write "failed\n"
  response.stream.close
end

#settingsObject



60
61
62
# File 'app/controllers/extface/handler_controller.rb', line 60

def settings
  render text: 'settings'
end