class SubZero::Socket

Attributes

config[R]

Public Class Methods

new(config = Configuration.default) click to toggle source
# File lib/sub_zero/socket.rb, line 18
def initialize config = Configuration.default
  @config = config
end

Public Instance Methods

check!(result_code) click to toggle source
# File lib/sub_zero/socket.rb, line 56
def check! result_code
  return if ZMQ::Util.resultcode_ok? result_code

  fail Socket::Error, "operation failed, errno [#{ZMQ::Util.errno}], " +
    "description [#{ZMQ::Util.error_string}]"
rescue
  raise Socket::Error "operation failed, cannot have errno"
end
context() { |context| ... } click to toggle source
# File lib/sub_zero/socket.rb, line 22
def context
  context = ZMQ::Context.create(1)
  fail Socket::Error, 'failed to create context' unless context
  yield context
  check! context.terminate
rescue Socket::Error
  check! context.terminate
  raise
end
receive_message(socket, request) click to toggle source
# File lib/sub_zero/socket.rb, line 51
def receive_message socket, request
  check! socket.recv_strings(frames = [])
  Message.parse frames, request
end
send_message(socket, message) click to toggle source
# File lib/sub_zero/socket.rb, line 44
def send_message socket, message
  frames = message.to_source
  last   = frames.pop
  frames.each { |f| check! socket.send_string f.to_s, ZMQ::SNDMORE }
  check! socket.send_string last
end
socket(context) { |socket| ... } click to toggle source
# File lib/sub_zero/socket.rb, line 32
def socket context
  socket = context.socket ZMQ::DEALER
  socket.identity = SecureRandom.hex(10)
  socket.setsockopt(ZMQ::LINGER, 0)
  check! socket.connect("tcp://#{config[:ip]}:#{config[:port]}")
  yield socket
  check! socket.close
rescue Socket::Error
  check! socket.close
  raise
end