class GQTP::Backend::Coolio::Socket

Public Class Methods

new(*args) click to toggle source
Calls superclass method
# File lib/gqtp/backend/coolio.rb, line 34
def initialize(*args)
  super
  @write_callbacks = []
  @read_callbacks = []
  @request = nil
  @buffer = "".force_encoding("ASCII-8BIT")
end

Public Instance Methods

on_read(data) click to toggle source
# File lib/gqtp/backend/coolio.rb, line 66
def on_read(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
on_write_complete() click to toggle source
# File lib/gqtp/backend/coolio.rb, line 50
def on_write_complete
  write_callbacks, @write_callbacks = @write_callbacks, []
  write_callbacks.each do |callback|
    callback.call
  end
end
read(size, &block) click to toggle source
# File lib/gqtp/backend/coolio.rb, line 57
def read(size, &block)
  if @buffer.bytesize >= size
    consume_data(size, block)
  else
    @read_callbacks << [size, block]
  end
  Request.new(evloop)
end
write(*chunks, &block) click to toggle source
Calls superclass method
# File lib/gqtp/backend/coolio.rb, line 42
def write(*chunks, &block)
  chunks.each do |chunk|
    super(chunk)
  end
  @write_callbacks << block if block_given?
  Request.new(evloop)
end

Private Instance Methods

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