Sha256: 9792e159ad2b52c18b67de35a3a6837e644aae7e873d7964c105c2c29f8feb2a

Contents?: true

Size: 1.71 KB

Versions: 4

Compression:

Stored size: 1.71 KB

Contents

# A proxy object returned from Celluloid::Actor.new/new_link which converts
# the normal Ruby method protocol into an inter-actor message protocol
class Celluloid::Proxy::Cell < Celluloid::Proxy::Sync
  # Used for reflecting on proxy objects themselves
  def __class__
    ::Celluloid::Proxy::Cell
  end

  def initialize(mailbox, actor_proxy, klass)
    super(mailbox, klass)
    @actor_proxy  = actor_proxy
    @sync_proxy   = ::Celluloid::Proxy::Sync.new(mailbox, klass)
    @async_proxy  = ::Celluloid::Proxy::Async.new(mailbox, klass)
    @future_proxy = ::Celluloid::Proxy::Future.new(mailbox, klass)
  end

  def _send_(meth, *args, &block)
    method_missing :__send__, meth, *args, &block
  end

  def inspect
    method_missing :inspect
  rescue ::Celluloid::DeadActorError
    "#<::Celluloid::Proxy::Cell(#{@klass}) dead>"
  end

  def method(name)
    ::Celluloid::Internals::Method.new(self, name)
  end

  alias_method :sync, :method_missing

  # Obtain an async proxy or explicitly invoke a named async method
  def async(method_name = nil, *args, &block)
    if method_name
      @async_proxy.method_missing method_name, *args, &block
    else
      @async_proxy
    end
  end

  # Obtain a future proxy or explicitly invoke a named future method
  def future(method_name = nil, *args, &block)
    if method_name
      @future_proxy.method_missing method_name, *args, &block
    else
      @future_proxy
    end
  end

  def alive?
    @actor_proxy.alive?
  end

  def dead?
    @actor_proxy.dead?
  end

  def thread
    @actor_proxy.thread
  end

  # Terminate the associated actor
  def terminate
    @actor_proxy.terminate
  end

  # Terminate the associated actor asynchronously
  def terminate!
    @actor_proxy.terminate!
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
celluloid-0.17.2 lib/celluloid/proxy/cell.rb
celluloid-0.17.1.2 lib/celluloid/proxy/cell.rb
celluloid-0.17.1.1 lib/celluloid/proxy/cell.rb
celluloid-0.17.1 lib/celluloid/proxy/cell.rb