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.



1493
1494
1495
1496
1497
# File 'lib/drb/drb.rb', line 1493

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

Instance Method Details

#performObject



1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
# File 'lib/drb/drb.rb', line 1499

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