class Riddl::Protocols::SSE
Public Class Methods
Source
# File lib/ruby/riddl/protocols/sse.rb, line 39 def initialize(app, env) @app = app @env = env @env['async.close'].callback { trigger_on_close } @body = DeferrableBody.new @closed = true end
Public Instance Methods
Source
# File lib/ruby/riddl/protocols/sse.rb, line 30 def close EM.next_tick do @body.succeed end end
Source
# File lib/ruby/riddl/protocols/sse.rb, line 48 def dispatch(data,cross_site_xhr) headers = { 'Content-Type' => 'text/event-stream', 'Cache-Control' => 'no-cache', 'X-Accel-Buffering' => 'no' } if @env['HTTP_ORIGIN'] && cross_site_xhr headers['Access-Control-Allow-Origin'] = '*' headers['Access-Control-Max-Age'] = '0' end EventMachine::next_tick { if trigger_on_open @env['async.callback'].call [200, headers, @body] else @body.fail @env['async.callback'].call [404, headers, {}] end } end
Source
# File lib/ruby/riddl/protocols/sse.rb, line 24 def send_with_id(id, data) EM.next_tick do @body.call [ "#{id}: #{data}" + EOL + EOL ] end end
Source
# File lib/ruby/riddl/protocols/sse.rb, line 37 def trigger_on_close; @closed = true; @app.onclose; end
Source
# File lib/ruby/riddl/protocols/sse.rb, line 36 def trigger_on_open(); @closed = false; res = @app.onopen; res ? true : false; end