class Protobuf::Rpc::Socket::Worker

Public Class Methods

new(sock, &complete_cb) click to toggle source
# File lib/protobuf/rpc/servers/socket/worker.rb, line 11
def initialize(sock, &complete_cb)
  @socket = sock
  @complete_cb = complete_cb

  data = read_data
  return unless data

  gc_pause do
    encoded_response = handle_request(data)
    send_data(encoded_response)
  end
end

Public Instance Methods

log_signature() click to toggle source
# File lib/protobuf/rpc/servers/socket/worker.rb, line 46
def log_signature
  @_log_signature ||= "[server-#{self.class}-#{object_id}]"
end
read_data() click to toggle source
# File lib/protobuf/rpc/servers/socket/worker.rb, line 24
def read_data
  size_io = StringIO.new

  until (size_reader = @socket.getc) == "-"
    size_io << size_reader
  end
  str_size_io = size_io.string

  @socket.read(str_size_io.to_i)
end
send_data(data) click to toggle source
# File lib/protobuf/rpc/servers/socket/worker.rb, line 35
def send_data(data)
  fail 'Socket closed unexpectedly' unless socket_writable?
  response_buffer = Protobuf::Rpc::Buffer.new(:write)
  response_buffer.set_data(data)

  @socket.write(response_buffer.write)
  @socket.flush

  @complete_cb.call(@socket)
end
socket_writable?() click to toggle source
# File lib/protobuf/rpc/servers/socket/worker.rb, line 50
def socket_writable?
  ! @socket.nil? && ! @socket.closed?
end