class Bones::RPC::Synchronous::Connection::Reader

Public Class Methods

new(connection, socket, adapter, writer) click to toggle source
# File lib/bones/rpc/synchronous/connection/reader.rb, line 7
def initialize(connection, socket, adapter, writer)
  @connection = connection
  @socket = socket
  @adapter = adapter
  @writer = writer
  @alive = true
  @buffer = ""
end

Public Instance Methods

alive?() click to toggle source
# File lib/bones/rpc/synchronous/connection/reader.rb, line 16
def alive?
  !!@alive
end
parse(data, proxy) click to toggle source
# File lib/bones/rpc/synchronous/connection/reader.rb, line 20
def parse(data, proxy)
  @buffer << data
  if @buffer.empty?
    read(proxy)
  else
    parser = Bones::RPC::Parser.new(@buffer, @adapter)
    begin
      loop { send parser.read, proxy }
    rescue EOFError
      @buffer.replace(parser.buffer.to_str)
    end
    return if @buffer.empty?
    read(proxy)
  end
end
read(proxy) click to toggle source
# File lib/bones/rpc/synchronous/connection/reader.rb, line 36
def read(proxy)
  parse @socket.readpartial(4096), proxy
rescue EOFError, Errors::ConnectionFailure => e
  Loggable.warn("  BONES-RPC:", "#{@connection.node.address.resolved} Reader terminating: #{e.message}", "n/a")
  terminate
  raise e
end
send(message, proxy) click to toggle source
# File lib/bones/rpc/synchronous/connection/reader.rb, line 44
def send(message, proxy)
  proxy.handle_message(message)
end
terminate() click to toggle source
# File lib/bones/rpc/synchronous/connection/reader.rb, line 48
def terminate
  return if not alive?
  @alive = false
  @buffer.clear
  @writer.terminate
end