class Rasti::Web::Broadcaster

Constants

VERSION

Attributes

app[R]

Public Class Methods

new(app, headers={}) click to toggle source
# File lib/rasti/web/broadcaster.rb, line 40
def initialize(app, headers={})
  @app = app
  @headers = headers
end

Private Class Methods

broadcaster() click to toggle source
# File lib/rasti/web/broadcaster.rb, line 32
def broadcaster
  @mutex.synchronize do
    @broadcaster ||= ::Broadcaster.new configuration
  end
end

Public Instance Methods

call(env) click to toggle source
# File lib/rasti/web/broadcaster.rb, line 45
def call(env)
  if Faye::EventSource.eventsource? env
    event_source = Faye::EventSource.new env, headers: @headers
    channel = env['PATH_INFO'][1..-1]

    subscription_id = self.class.subscribe channel do |message|
      event_source.send message[:data], event: message[:event], 
                                        id:    message[:id]
    end

    event_source.on :close do
      self.class.unsubscribe subscription_id
      event_source = nil
    end

    event_source.rack_response
  else
    app.call env
  end
end