class WebsocketRails::ConnectionAdapters::Http::DeferrableBody
From [thin_async](github.com/macournoyer/thin_async)
Public Class Methods
new(chunks = [])
click to toggle source
@param chunks - object that responds to each. holds initial chunks of content
# File lib/websocket_rails/connection_adapters/http.rb, line 73 def initialize(chunks = []) @queue = [] chunks.each {|c| chunk(c)} end
Public Instance Methods
chunk(*chunks)
click to toggle source
Enqueue a chunk of content to be flushed to stream at a later time
# File lib/websocket_rails/connection_adapters/http.rb, line 79 def chunk(*chunks) @queue += chunks schedule_dequeue end
close!(flush = true)
click to toggle source
# File lib/websocket_rails/connection_adapters/http.rb, line 95 def close!(flush = true) EM.next_tick { if !flush || empty? succeed else schedule_dequeue close!(flush) end } end
each(&blk)
click to toggle source
When rack attempts to iterate over `body`, save the block, and execute at a later time when `@queue` has elements
# File lib/websocket_rails/connection_adapters/http.rb, line 86 def each(&blk) @body_callback = blk schedule_dequeue end
empty?()
click to toggle source
# File lib/websocket_rails/connection_adapters/http.rb, line 91 def empty? @queue.empty? end
Private Instance Methods
schedule_dequeue()
click to toggle source
# File lib/websocket_rails/connection_adapters/http.rb, line 108 def schedule_dequeue return unless @body_callback EM.next_tick do next unless c = @queue.shift @body_callback.call(c) schedule_dequeue unless empty? end end