Class: Sumac::RemoteObject

Inherits:
Object show all
Defined in:
lib/sumac/remote_object.rb

Instance Method Summary collapse

Constructor Details

#initialize(connection, remote_reference) ⇒ RemoteObject

Returns a new instance of RemoteObject.



4
5
6
7
8
9
# File 'lib/sumac/remote_object.rb', line 4

def initialize(connection, remote_reference)
  raise "argument 'connection' must be a Connection" unless connection.is_a?(Connection)
  @connection = connection
  raise unless remote_reference.is_a?(RemoteReference)
  @remote_reference = remote_reference
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(method_name, *arguments, &block) ⇒ Object

blocks not working yet



11
12
13
14
15
16
17
18
19
20
21
22
23
# File 'lib/sumac/remote_object.rb', line 11

def method_missing(method_name, *arguments, &block)  # blocks not working yet
  @connection.mutex.lock
  raise StaleObjectError unless @remote_reference.callable?
  begin
    arguments << block.to_lambda if block_given?
    return_value = @connection.call_dispatcher.make_call(self, method_name.to_s, arguments)
  rescue ClosedError
    raise StaleObjectError
  end
  return_value
ensure
  @connection.mutex.unlock if @connection.mutex.owned?
end

Instance Method Details

#__remote_reference__Object



25
26
27
# File 'lib/sumac/remote_object.rb', line 25

def __remote_reference__
  @remote_reference
end

#forgetObject



29
30
31
32
# File 'lib/sumac/remote_object.rb', line 29

def forget
  @connection.mutex.synchronize { @remote_reference.local_forget_request }
  nil
end

#inspectObject



34
35
36
# File 'lib/sumac/remote_object.rb', line 34

def inspect
  "#<Sumac::RemoteObject:#{"0x00%x" % (object_id << 1)}>"
end