Class: DRb::DRbServer::InvokeMethod

Inherits:
Object
  • Object
show all
Includes:
InvokeMethod18Mixin, InvokeMethod16Mixin
Defined in:
lib/drb/drb.rb,
lib/drb/drb.rb,
lib/drb/drb.rb

Overview

:nodoc:

Instance Method Summary collapse

Methods included from InvokeMethod18Mixin

#block_yield, #perform_with_block

Constructor Details

#initialize(drb_server, client) ⇒ InvokeMethod

Returns a new instance of InvokeMethod.



1518
1519
1520
1521
1522
# File 'lib/drb/drb.rb', line 1518

def initialize(drb_server, client)
  @drb_server = drb_server
  @safe_level = drb_server.safe_level
  @client = client
end

Instance Method Details

#performObject



1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
# File 'lib/drb/drb.rb', line 1524

def perform
  @result = nil
  @succ = false
  setup_message

  if $SAFE < @safe_level
    info = Thread.current['DRb']
    if @block
      @result = Thread.new {
        Thread.current['DRb'] = info
        $SAFE = @safe_level
        perform_with_block
      }.value
    else
      @result = Thread.new {
        Thread.current['DRb'] = info
        $SAFE = @safe_level
        perform_without_block
      }.value
    end
  else
    if @block
      @result = perform_with_block
    else
      @result = perform_without_block
    end
  end
  @succ = true
  if @msg_id == :to_ary && @result.class == Array
    @result = DRbArray.new(@result)
  end
  return @succ, @result
rescue StandardError, ScriptError, Interrupt
  @result = $!
  return @succ, @result
end