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.



1486
1487
1488
1489
1490
# File 'lib/drb/drb.rb', line 1486

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

Instance Method Details

#performObject



1492
1493
1494
1495
1496
1497
1498
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
# File 'lib/drb/drb.rb', line 1492

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