Sha256: af7847f2dc528050d8ecbeed94767c2f00d34eec0b745e481e6eeb8b8c7ec522
Contents?: true
Size: 1.33 KB
Versions: 1
Compression:
Stored size: 1.33 KB
Contents
module Routing def self.load_balancer_actor(actors) router = Actors.actor_of(Dispatcher).start router | ActorList.new(actors) router end def self.Broadcast(message) return B.new(message) end class B #:nodoc: def initialize(message) @message = message end def message @message end end class ActorList #:nodoc: def initialize(actors) @actors = actors @free_actors = Queue.new @actors.each { |actor| @free_actors << actor } end def broadcast(message) @actors.each do |actor| actor | message end end def get_actor @free_actors.shift end def release_actor(actor) @free_actors << actor end end class Dispatcher < Actor def receive(message) if message.instance_of? Routing::ActorList @list = message elsif message.instance_of? Routing::B @list.broadcast(message.message) else f = @list.get_actor unless f.nil? f < message else Ara.debug("No free actor :(") end end end def actor_response_with_name(actor, r) @list.release_actor(actor) reply r end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
ara-0.0.3 | lib/ara/routing.rb |