Class: Jugglite::SseConnection

Inherits:
Object
  • Object
show all
Defined in:
lib/jugglite/sse_connection.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(request) ⇒ SseConnection

Returns a new instance of SseConnection.



5
6
7
8
9
# File 'lib/jugglite/sse_connection.rb', line 5

def initialize(request)
  @request = request
  @longpolling = request.xhr?
  @body = DeferrableBody.new
end

Instance Attribute Details

#bodyObject (readonly)

Returns the value of attribute body.



3
4
5
# File 'lib/jugglite/sse_connection.rb', line 3

def body
  @body
end

#requestObject (readonly)

Returns the value of attribute request.



3
4
5
# File 'lib/jugglite/sse_connection.rb', line 3

def request
  @request
end

Instance Method Details

#callback(&block) ⇒ Object



36
37
38
# File 'lib/jugglite/sse_connection.rb', line 36

def callback(&block)
  @body.callback(&block)
end

#closeObject



32
33
34
# File 'lib/jugglite/sse_connection.rb', line 32

def close
  @body.succeed
end

#comment(comment) ⇒ Object



28
29
30
# File 'lib/jugglite/sse_connection.rb', line 28

def comment(comment)
  @body.write(": #{comment}\n")
end

#errback(&block) ⇒ Object



40
41
42
# File 'lib/jugglite/sse_connection.rb', line 40

def errback(&block)
  @body.errback(&block)
end

#keepalive(extra = nil) ⇒ Object



23
24
25
26
# File 'lib/jugglite/sse_connection.rb', line 23

def keepalive(extra=nil)
  # From http://dev.w3.org/html5/eventsource/#notes
  comment("keepalive #{extra}")
end

#longpolling?Boolean

Returns:

  • (Boolean)


11
12
13
# File 'lib/jugglite/sse_connection.rb', line 11

def longpolling?
  @longpolling
end

#write(message, options = {}) ⇒ Object



15
16
17
18
19
20
21
# File 'lib/jugglite/sse_connection.rb', line 15

def write(message, options = {})
  reset_timeout if longpolling?
  buffer = ""
  options.each { |k, v| buffer << "#{k}: #{v}\n" }
  message.each_line { |line| buffer << "data: #{line.strip}\n" }
  @body.write(buffer << "\n")
end