class GxG::Networking::ZMQ::ZmqAdapter

Public Instance Methods

close() click to toggle source
# File lib/gxg/gxg_zmq.rb, line 101
def close()
  if @open == true
    @connector.socket.close
    @open = false
    true
  else
    false
  end
end
context() click to toggle source
# File lib/gxg/gxg_zmq.rb, line 111
def context()
  if @open == true
    @connector.context()
  end
end
identity() click to toggle source
# File lib/gxg/gxg_zmq.rb, line 123
def identity()
  if @open == true
    @connector.socket.identity
  end
end
listen(&block) click to toggle source
# File lib/gxg/gxg_zmq.rb, line 129
def listen(&block)
  if @open == true
    @connector.listen(&block)
  end
end
open?() click to toggle source
# File lib/gxg/gxg_zmq.rb, line 97
def open?()
  @open
end
receive(**options, &block) click to toggle source
# File lib/gxg/gxg_zmq.rb, line 135
def receive(**options, &block)
  if @open == true
    @connector.receive(options, &block)
  end
end
send(message="", **options) click to toggle source
# File lib/gxg/gxg_zmq.rb, line 141
def send(message="", **options)
  if @open == true
    @connector.send(message.to_s,options)
  end
end
socket() click to toggle source
# File lib/gxg/gxg_zmq.rb, line 117
def socket()
  if @open == true
    @connector.socket()
  end
end
vetted_parameters(params={}) click to toggle source
Proposed: {:bind/connect => <URI>, :context => <Context>, :encode => <Proc>, :decode => <Proc>}
mode (:bind, :connect) — a mode for the socket.
Options Hash:

context (ZMQ::Context) — a context to use for this socket (one will be created if not provided). encode (lambda) — how to encode messages. decode (lambda) — how to decode messages. transport (Symbol) — default: :tcp — transport for transport. address (String) — default: '127.0.0.1' — address for endpoint. port (Fixnum) — default: 5555 — port for endpoint.

# File lib/gxg/gxg_zmq.rb, line 47
def vetted_parameters(params={})
  unless params.is_a?(::Hash)
    raise ArgumentError, "You MUST provide a Hash as parameters."
  end
  if params[:bind]
    # bind
    mode = :bind
  else
    # connect
    mode = :connect
  end
  options = {}
  if params[:context].is_a?(::ZMQ::Context)
    options[:context] = params[:context]
  end
  uri = params[(mode)].clone
  unless uri.port
    uri.port = 5555
  end
  options[:port] = uri.port
  unless uri.is_a?(::URI::Generic)
    raise ArgumentError, "You MUST provide a valid URI to bind or connect to."
  end
  if ::GxG::Networking::ZMQ::zmq_supported_protocols().include?(uri.scheme())
    if mode == :bind
      if ["tcp", "tcp4", "tcp6", "udp", "udp4", "udp6"].include?(uri.scheme())
        uri.resolve_host()
        if ::GxG::SYSTEM.network_port_used?(::Addrinfo::parse(uri))
          raise Errno::EADDRINUSE, "Address and port already in use: #{uri.to_s}"
        end
      end
    end
  else
    raise Exception, "Unsupported networking protocol: #{uri.scheme().inspect}"
  end
  options[:transport] = uri.scheme.to_s.to_sym
  options[:address] = uri.hostname
  if ["tcp", "tcp4", "tcp6", "udp", "udp4", "udp6"].include?(uri.scheme())
    options[:port] = (uri.port || 5555)
  end
  options[:transport] = uri.scheme.to_s.to_sym
  if params[:encode].respond_to?(:call)
    options[:encode] = params[:encode]
  end
  if params[:decode].respond_to?(:call)
    options[:decode] = params[:decode]
  end
  {:mode => mode, :options => options}
end