Class: Angelo::Responder::Eventsource

Inherits:
Angelo::Responder show all
Defined in:
lib/angelo/responder/eventsource.rb

Instance Attribute Summary

Attributes inherited from Angelo::Responder

#base, #connection, #mustermann, #request

Instance Method Summary collapse

Methods inherited from Angelo::Responder

content_type, #content_type, #error_message, #handle_error, #headers, #on_close, #on_close=, #redirect, #redirect!, #reset!, #respond_with?, #transfer_encoding

Constructor Details

#initialize(_headers = nil, &block) ⇒ Eventsource

Returns a new instance of Eventsource.



5
6
7
8
# File 'lib/angelo/responder/eventsource.rb', line 5

def initialize _headers = nil, &block
  headers _headers if _headers
  super :get, &block
end

Instance Method Details

#handle_requestObject



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
# File 'lib/angelo/responder/eventsource.rb', line 15

def handle_request
  if !@response_handler
      raise NotImplementedError
  end
  @base.filter :before
  @body = catch(:halt) do
    @base.eventsource do |socket|
      @base.instance_exec(socket, &@response_handler)
    end
  end
  if HALT_STRUCT === @body
    raise RequestError.new 'unknown sse error' unless @body.body == :sse
  end

  # TODO any real reason not to run afters with SSE?
  # @base.filter :after

  respond
rescue IOError => ioe
  warn "#{ioe.class} - #{ioe.message}"
rescue RequestError => re
  headers SSE_HEADER
  handle_error re, re.type
rescue => e
  handle_error e
end

#request=(request) ⇒ Object



10
11
12
13
# File 'lib/angelo/responder/eventsource.rb', line 10

def request= request
  @params = nil
  @request = request
end

#respondObject



42
43
44
45
# File 'lib/angelo/responder/eventsource.rb', line 42

def respond
  Angelo.log :sse, @connection, @request, nil, :ok
  @request.respond 200, headers, nil
end