class Raft4r::RPC::EMRPCClient

Constants

RPC_TIMEOUT

Attributes

pending[R]

Public Class Methods

new(addr, port, sender_node_id) click to toggle source
# File lib/raft4r/rpc_base.rb, line 82
def initialize addr, port, sender_node_id
        @addr = addr
        @port = port
        @current_reqid = Time.now.to_i + rand(1000)
        @pending = {}
        @node_id = sender_node_id
        @us = EM.open_datagram_socket '127.0.0.1', 0, RPCClientConn, self
        EM.add_periodic_timer(RPC_TIMEOUT / 2) do
                now = Time.now
                s1 = @pending.size
                @pending.delete_if {|k,v| now - v[2] > RPC_TIMEOUT }
                timeout_rpcs = s1 - @pending.size
                LOGGER.warn "timeout rpcs: #{timeout_rpcs}" if timeout_rpcs > 0
        end
end

Public Instance Methods

method_missing(method_sym, *arguments, &block) click to toggle source
# File lib/raft4r/rpc_base.rb, line 98
def method_missing method_sym, *arguments, &block
        @current_reqid += 1
        req = Request.new(@node_id, @current_reqid, method_sym, arguments)
        pack = Marshal.dump(req)
        @pending[req.req_id] = [req, block, Time.now]
        @us.send_datagram pack, @addr, @port
end