module Ractor::Server

Constants

INTERRUPT
VERSION
WRAP_IN_REMOTE_ERROR

Private Class Methods

included(base) click to toggle source
# File lib/ractor/server/server.rb, line 76
        def included(base)
  base.const_set(:Client, ::Class.new(Client) { const_set(:Server, base) })
  base.extend ClassMethods
end

Private Instance Methods

main_loop() click to toggle source
# File lib/ractor/server/server.rb, line 9
        def main_loop
  debug(:server) { "Running #{inspect}" }

  loop do
    process(*receive_request)
  end

  debug(:server) { "Terminated #{inspect}" }
  :done
end
process(rq, method_name, args, options, block = nil) click to toggle source
# File lib/ractor/server/server.rb, line 23
        def process(rq, method_name, args, options, block = nil)
  catch(INTERRUPT) do
    if rq.converse?
      public_send(method_name, *args, **options) do |yield_arg|
        yield_client(rq, yield_arg)
      end
    else
      public_send(method_name, *args, **options, &block)
    end => result
  rescue Exception => e
    rq.send_exception(e) unless rq.tell?
  else
    rq.conclude(result) unless rq.tell?
  end
end
yield_client(rq, arg) click to toggle source
# File lib/ractor/server/server.rb, line 39
        def yield_client(rq, arg)
  yield_request = rq.converse(arg)
  loop do
    rq, *data = yield_request.receive
    case rq.sync
    when :conclude then return data.first
    when :interrupt then throw INTERRUPT
    else # Reentrant request
      process(rq, *data)
    end
  end
end