class Session

Public Class Methods

decode(chunk) click to toggle source
# File web.rb, line 44
def self.decode(chunk)
  headersize = [1,1].pack("GN").size
  return chunk[headersize .. -1]
end
new() click to toggle source
# File web.rb, line 9
def initialize
  @queue = Queue.new
  @recent = []
  @subscribers = []

  @publisher_thread = Thread.new { run }
end

Public Instance Methods

<<(chunk) click to toggle source
# File web.rb, line 29
def <<(chunk)
  @recent << chunk
  @recent = @recent[0..100]
  @queue << chunk
end
close() click to toggle source
# File web.rb, line 49
def close
  @queue << ShutdownSignal
end
run() click to toggle source
# File web.rb, line 17
def run
  while true
    chunk = @queue.pop
    puts "#{@subscribers.count} subscribers"
    @subscribers.each do |subscriber|
      #p subscriber => chunk
      subscriber << chunk
    end
    break if chunk == ShutdownSignal
  end
end
subscribe(output) click to toggle source
# File web.rb, line 35
def subscribe(output)
  @recent.each { |c| output << c }
  @subscribers << output
end
unsubscribe(output) click to toggle source
# File web.rb, line 40
def unsubscribe(output)
  @subscribers.delete(output)
end