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