Sha256: 76eaadb79a1bd33be02caea14867ff3f87341807c917caba80a05b3af59b1b23

Contents?: true

Size: 1.18 KB

Versions: 77

Compression:

Stored size: 1.18 KB

Contents

require 'thread'

module Celluloid
  # Thread safe storage of inter-actor links
  class Links
    include Enumerable

    def initialize
      @links = {}
      @lock  = Mutex.new
    end

    # Add an actor to the current links
    def <<(actor)
      @lock.synchronize do
        @links[actor.mailbox.address] = actor
      end
      actor
    end

    # Do links include the given actor?
    def include?(actor)
      @lock.synchronize do
        @links.has_key? actor.mailbox.address
      end
    end

    # Remove an actor from the links
    def delete(actor)
      @lock.synchronize do
        @links.delete actor.mailbox.address
      end
      actor
    end

    # Iterate through all links
    def each
      @lock.synchronize do
        @links.each { |_, actor| yield(actor) }
      end
    end

    # Map across links
    def map
      result = []
      each { |actor| result << yield(actor) }
      result
    end

    # Send an event message to all actors
    def send_event(event)
      each { |actor| actor.mailbox.system_event event }
    end

    # Generate a string representation
    def inspect
      links = self.map(&:inspect).join(',')
      "#<#{self.class}[#{links}]>"
    end
  end
end

Version data entries

77 entries across 77 versions & 3 rubygems

Version Path
engineyard-serverside-2.0.4 lib/vendor/celluloid/lib/celluloid/links.rb
engineyard-serverside-1.6.5 lib/vendor/celluloid/lib/celluloid/links.rb
engineyard-serverside-2.0.3 lib/vendor/celluloid/lib/celluloid/links.rb
engineyard-serverside-2.0.2 lib/vendor/celluloid/lib/celluloid/links.rb
engineyard-serverside-2.0.1 lib/vendor/celluloid/lib/celluloid/links.rb
engineyard-serverside-2.0.0 lib/vendor/celluloid/lib/celluloid/links.rb
engineyard-serverside-2.0.0.rc1 lib/vendor/celluloid/lib/celluloid/links.rb
engineyard-serverside-2.0.0.pre5 lib/vendor/celluloid/lib/celluloid/links.rb
engineyard-serverside-2.0.0.pre4 lib/vendor/celluloid/lib/celluloid/links.rb
engineyard-serverside-2.0.0.pre3 lib/vendor/celluloid/lib/celluloid/links.rb
engineyard-serverside-2.0.0.pre2 lib/vendor/celluloid/lib/celluloid/links.rb
engineyard-serverside-2.0.0.pre1 lib/vendor/celluloid/lib/celluloid/links.rb
kulesa-celluloid-0.10.2 lib/celluloid/links.rb
engineyard-serverside-1.7.0.pre2 lib/vendor/celluloid/lib/celluloid/links.rb
engineyard-serverside-1.6.4 lib/vendor/celluloid/lib/celluloid/links.rb
engineyard-serverside-1.6.4.pre6 lib/vendor/celluloid/lib/celluloid/links.rb
engineyard-serverside-1.6.4.pre5 lib/vendor/celluloid/lib/celluloid/links.rb
engineyard-serverside-1.6.4.pre4 lib/vendor/celluloid/lib/celluloid/links.rb
engineyard-serverside-1.6.4.pre3 lib/vendor/celluloid/lib/celluloid/links.rb
engineyard-serverside-1.6.4.pre2 lib/vendor/celluloid/lib/celluloid/links.rb