module GQTP::Backend::Eventmachine::Handler

Public Instance Methods

post_init() click to toggle source
# File lib/gqtp/backend/eventmachine.rb, line 30
def post_init
  @read_callbacks = []
  @buffer = "".force_encoding("ASCII-8BIT")
end
read(size, &block) click to toggle source
# File lib/gqtp/backend/eventmachine.rb, line 46
def read(size, &block)
  if @buffer.bytesize >= size
    consume_data(size, block)
  else
    @read_callbacks << [size, block]
  end
  if block_given?
    nil
  else
    Request.new
  end
end
receive_data(data) click to toggle source
# File lib/gqtp/backend/eventmachine.rb, line 59
def receive_data(data)
  @buffer << data
  until @read_callbacks.empty?
    size, callback = @read_callbacks.first
    break if @buffer.bytesize < size
    @read_callbacks.shift
    consume_data(size, callback)
  end
end
write(*chunks, &block) click to toggle source
# File lib/gqtp/backend/eventmachine.rb, line 35
def write(*chunks, &block)
  chunks.each do |chunk|
    send_data(chunk)
  end
  if block_given?
    block.call
  else
    Request.new
  end
end

Private Instance Methods

consume_data(size, callback) click to toggle source
# File lib/gqtp/backend/eventmachine.rb, line 70
def consume_data(size, callback)
  data = @buffer[0, size]
  @buffer = @buffer[size..-1]
  callback.call(data)
end