class Floss::RPC::ZMQ::Server

Attributes

socket[RW]

Public Class Methods

new(address, &handler) click to toggle source
Calls superclass method Floss::RPC::Server::new
# File lib/floss/rpc/zmq.rb, line 70
def initialize(address, &handler)
  super
  async.run
end

Public Instance Methods

decode_request(request) click to toggle source
# File lib/floss/rpc/zmq.rb, line 104
def decode_request(request)
  command, payload = request.split(':', 2)
  payload = Marshal.load(payload)

  [command.to_sym, payload]
end
encode_response(response) click to toggle source
# File lib/floss/rpc/zmq.rb, line 100
def encode_response(response)
  Marshal.dump(response)
end
finalize() click to toggle source
# File lib/floss/rpc/zmq.rb, line 111
def finalize
  socket.close if socket
end
handle(request) click to toggle source

@param [String] request A request string containing command and payload separated by a colon.

# File lib/floss/rpc/zmq.rb, line 94
def handle(request)
  command, payload = decode_request(request)
  response = handler.call(command, payload)
  socket.send(encode_response(response))
end
loop!() click to toggle source
# File lib/floss/rpc/zmq.rb, line 89
def loop!
  loop { handle(socket.read) }
end
run() click to toggle source
# File lib/floss/rpc/zmq.rb, line 75
def run
  self.socket = RepSocket.new

  begin
    info("Binding to #{address}")
    socket.bind(address)
  rescue IOError
    socket.close
    raise
  end

  async.loop!
end
terminate() click to toggle source
Calls superclass method
# File lib/floss/rpc/zmq.rb, line 115
def terminate
  super
  socket.close if socket
end