lib/celluloid/zmq/socket.rb
module Celluloid
module ZMQ
class Socket
# Create a new socket
def initialize(type)
type = type.is_a?(Integer) ? type : type.to_s.upcase.to_sym
@socket = CZTop::Socket.new_by_type(type)
@linger = 0
end
attr_reader :linger
# Connect to the given 0MQ address
# Address should be in the form: tcp://1.2.3.4:5678/
def connect(addr)
@socket.connect addr
true
rescue
raise IOError, "error connecting to #{addr}: #{$!.message}"
end
def linger=(value)
value ||= -1
@socket.options.linger = value
@linger = value
rescue
raise IOError, "couldn't set linger: #{$!.message}"
end
def identity=(value)
@socket.options.identity = "#{value}"
rescue
raise IOError, "couldn't set identity: #{$!.message}"
end
def identity
@socket.options.identity
end
def set(option, value, _length = nil)
@socket.options[option] = value
rescue
raise IOError, "couldn't set value for option #{option}: #{$!.message}"
end
def get(option)
@socket.options[option]
rescue
raise IOError, "couldn't get value for option #{option}: #{$!.message}"
end
# Bind to the given 0MQ address
# Address should be in the form: tcp://1.2.3.4:5678/
def bind(addr)
@socket.bind(addr)
rescue
raise IOError, "couldn't bind to #{addr}: #{$!.message}"
end
# Close the socket
def close
@socket.close
end
end
end
end
unless defined?(::ZMQ)
# Make legacy code like this work:
#
# zmq_socket.set(::ZMQ::IDENTITY, "foo")
# zmq_socket.get(::ZMQ::IDENTITY)
#
# This assumes that the user didn't require 'ffi-rzmq' themselves, but had
# it done by celluloid-zmq.
module ZMQ
def self.const_missing(name)
Celluloid::Internals::Logger.deprecate("Using ZMQ::#{name} as an option name is deprecated. Please report if you need this, so it can be added to Celluloid::ZMQ::Socket.")
return name
end
end
end