Sha256: 3e2c2a2af83c962c4c6ee3925d6ed68488a5960704caf55602acda3c4bc9d839

Contents?: true

Size: 1.15 KB

Versions: 1

Compression:

Stored size: 1.15 KB

Contents

module Celluloid
  module Proxy
    # A proxy which sends synchronous calls to an actor
    class Sync < Abstract
      attr_reader :mailbox

      # Used for reflecting on proxy objects themselves
      def __class__
        Proxy::Sync
      end

      def initialize(mailbox, klass)
        @mailbox = mailbox
        @klass = klass
      end

      def inspect
        "#<Celluloid::Proxy::Sync(#{@klass})>"
      end

      def respond_to?(meth, include_private = false)
        __class__.instance_methods.include?(meth) || method_missing(:respond_to?, meth, include_private)
      end

      def method_missing(meth, *args, &block)
        unless @mailbox.alive?
          fail DeadActorError, "attempted to call a dead actor"
        end

        if @mailbox == ::Thread.current[:celluloid_mailbox]
          args.unshift meth
          meth = :__send__
          # actor = Thread.current[:celluloid_actor]
          # actor = actor.behavior.subject.bare_object
          # return actor.__send__(*args, &block)
        end

        call = Call::Sync.new(::Celluloid.mailbox, meth, args, block)
        @mailbox << call
        call.value
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
celluloid-0.17.0 lib/celluloid/proxy/sync.rb