class Bones::RPC::Celluloid::Connection::Reader

Public Class Methods

new(connection, socket, adapter) click to toggle source
# File lib/bones/rpc/celluloid/connection/reader.rb, line 11
def initialize(connection, socket, adapter)
  @connection = connection
  @socket = socket
  @adapter = adapter
  @buffer = ""
  async.read
end

Public Instance Methods

parse(data) click to toggle source
# File lib/bones/rpc/celluloid/connection/reader.rb, line 19
def parse(data)
  @buffer << data
  if @buffer.empty?
    async.read
  else
    parser = Bones::RPC::Parser.new(@buffer, @adapter)
    begin
      loop { async.send parser.read }
    rescue EOFError
      @buffer.replace(parser.buffer.to_str)
    end
    async.read
  end
end
read() click to toggle source
# File lib/bones/rpc/celluloid/connection/reader.rb, line 34
def read
  loop do
    async.parse @socket.readpartial(4096)
  end
rescue EOFError, Errors::ConnectionFailure => e
  Loggable.warn("  BONES-RPC:", "#{@connection.node.address.resolved} Reader terminating: #{e.message}", "n/a")
  terminate
end
send(message) click to toggle source
# File lib/bones/rpc/celluloid/connection/reader.rb, line 43
def send(message)
  @connection.node.handle_message(message)
end