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, #request

Instance Method Summary collapse

Methods inherited from Angelo::Responder

content_type, #content_type, #error_message, #handle_error, #headers, #initialize, #redirect, #respond_with?, symhash

Constructor Details

This class inherits a constructor from Angelo::Responder

Instance Method Details

#handle_requestObject



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

def handle_request
  begin
    if @response_handler
      @base.before if @base.respond_to? :before
      @body = catch(:halt) { @base.eventsource &@response_handler.bind(@base) }
      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.after if @base.respond_to? :after

      respond
    else
      raise NotImplementedError
    end
  rescue IOError => ioe
    warn "#{ioe.class} - #{ioe.message}"
    close_websocket
  rescue => e
    error e.message
    ::STDERR.puts e.backtrace
    begin
      @connection.close
    rescue Reel::StateError => rcse
      close_websocket
    end
  end
end

#request=(request) ⇒ Object



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

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

#respondObject



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

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