BrB::Request

Public Instance Methods

is_brb_request_blocking?(meth) click to toggle source
# File lib/brb/request.rb, line 8
def is_brb_request_blocking?(meth)
  if m = meth.to_s and m.rindex('_block') == (m.size - 6)
    return true
  end
  nil
end
new_brb_in_request(meth, *args) click to toggle source

Execute a request on the local object

# File lib/brb/request.rb, line 59
def new_brb_in_request(meth, *args)

  if is_brb_request_blocking?(meth)

    m = meth.to_s
    m = m[0, m.size - 6].to_sym

    idrequest = args.pop
    thread = args.pop
    begin
      r = ((args.size > 0) ? @object.send(m, *args) : @object.send(m))
      brb_send([ReturnCode, r, thread, idrequest])
    rescue Exception => e
      brb_send([ReturnCode, e, thread, idrequest])
      BrB.logger.error e.to_s
      BrB.logger.error e.backtrace.join("\n")
      #raise e

    end
  else

    begin
      (args.size > 0) ? @object.send(meth, *args) : @object.send(meth)
    rescue Exception => e
      BrB.logger.error "#{e.to_s} => By calling #{meth} on #{@object.class} with args : #{args.inspect}"
      BrB.logger.error e.backtrace.join("\n")
      raise e
    end

  end

end
new_brb_out_request(meth, *args, &blck) click to toggle source

Execute a request on a distant object

# File lib/brb/request.rb, line 16
def new_brb_out_request(meth, *args, &blck)
  Thread.current[:brb_nb_out] ||= 0
  Thread.current[:brb_nb_out] += 1

  raise BrBCallbackWithBlockingMethodException.new if is_brb_request_blocking?(meth) and block_given?

  block = (is_brb_request_blocking?(meth) or block_given?) ? Thread.current.to_s.to_sym : nil
  if block
    args << block 
    args << Thread.current[:brb_nb_out]
  end
  
  if block_given?
    # Simulate a method with _block in order to make BrB send the answer

    meth = "#{meth}_block".to_sym
  end

  args.size > 0 ? brb_send([MessageRequestCode, meth, args]) : brb_send([MessageRequestCode, meth])

  if block_given?
    # Declare the callback

    declare_callback(block, Thread.current[:brb_nb_out], &blck)

  elsif block # Block until the request return


    #TimeMonitor.instance.watch_thread!(@timeout_rcv_value || 45)

    begin
      r = recv(block, Thread.current[:brb_nb_out], &blck)
    rescue Exception => e
      raise e
    ensure
      #TimeMonitor.instance.remove_thread!

    end
    if r.kind_of? Exception
      raise r
    end
    return r
  end

  nil
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.