class Liebre::Actor::RPC::Client::Pending

Constants

Request

Attributes

pending[R]

Public Class Methods

new() click to toggle source
# File lib/liebre/actor/rpc/client/pending.rb, line 12
def initialize
  @pending = {}
end

Public Instance Methods

add(timeout) { |correlation_id| ... } click to toggle source
# File lib/liebre/actor/rpc/client/pending.rb, line 16
def add timeout
  new_ivar.tap do |ivar|
    correlation_id = new_correlation_id()
    yield(correlation_id)

    store(correlation_id, ivar, timeout)
  end
end
expire() click to toggle source
# File lib/liebre/actor/rpc/client/pending.rb, line 31
def expire
  now = current_time

  pending.delete_if do |_correlation_id, request|
    now > request.expiration_time
  end
end
finish(correlation_id, response) click to toggle source
# File lib/liebre/actor/rpc/client/pending.rb, line 25
def finish correlation_id, response
  pending.delete(correlation_id).tap do |request|
    request.ivar.set(response) if request
  end
end

Private Instance Methods

current_time() click to toggle source
# File lib/liebre/actor/rpc/client/pending.rb, line 55
def current_time
  Time.now
end
new_correlation_id() click to toggle source
# File lib/liebre/actor/rpc/client/pending.rb, line 47
def new_correlation_id
  SecureRandom.urlsafe_base64
end
new_ivar() click to toggle source
# File lib/liebre/actor/rpc/client/pending.rb, line 51
def new_ivar
  Concurrent::IVar.new
end
store(correlation_id, ivar, timeout) click to toggle source
# File lib/liebre/actor/rpc/client/pending.rb, line 41
def store correlation_id, ivar, timeout
  expiration_time = current_time + timeout

  pending[correlation_id] = Request.new(ivar, expiration_time)
end