Class: MAS
- Inherits:
-
Object
- Object
- MAS
- Defined in:
- lib/agens/mas.rb
Constant Summary collapse
- @@counters =
{}
- @@recipes =
[]
Class Method Summary collapse
-
.agent(agent, options = {}) ⇒ Object
region DSL agent MyAgent agent MyAgent, as: :james_bond agent MyAgent, as: :james_bond, args: [1, 2].
-
.agents(agent, options = {}) ⇒ Object
agents MyAgent agents MyAgent, as: :james_bonds agents MyAgent, count: 10 agents MyAgent, as: :james_bonds, count: 10 agents MyAgent, as: :james_bonds, count: 10, args: [1, 2].
-
.generate_recipe(agent, options = {}) ⇒ Object
endregion DSL.
Instance Method Summary collapse
- #add_agent(agent, options = {}) ⇒ Object
-
#initialize ⇒ MAS
constructor
A new instance of MAS.
- #run ⇒ Object
- #shutdown ⇒ Object
- #world ⇒ Object
Constructor Details
#initialize ⇒ MAS
Returns a new instance of MAS.
18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
# File 'lib/agens/mas.rb', line 18 def initialize @config = Celluloid::Supervision::Configuration.new @names = [] @@recipes.each do |agent_recipe| if !agent_recipe.args.nil? && agent_recipe.args.any? @config.define(type: agent_recipe.type, as: agent_recipe.name, args: agent_recipe.args) else @config.define(type: agent_recipe.type, as: agent_recipe.name) end @names << agent_recipe.name end end |
Class Method Details
.agent(agent, options = {}) ⇒ Object
region DSL agent MyAgent agent MyAgent, as: :james_bond agent MyAgent, as: :james_bond, args: [1, 2]
63 64 65 |
# File 'lib/agens/mas.rb', line 63 def self.agent(agent, = {}) @@recipes << self.generate_recipe(agent, ) end |
.agents(agent, options = {}) ⇒ Object
agents MyAgent agents MyAgent, as: :james_bonds agents MyAgent, count: 10 agents MyAgent, as: :james_bonds, count: 10 agents MyAgent, as: :james_bonds, count: 10, args: [1, 2]
72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 |
# File 'lib/agens/mas.rb', line 72 def self.agents(agent, = {}) mas_name = self.name.to_sym pool_name = "#{agent.class.name.to_sym}_pool" @@counters[pool_name] ||= 0 @@counters[pool_name] += 1 name = .key?(:as) ? [:as] : "#{mas_name}_#{pool_name}_#{@@counters[pool_name]}" count = .key?(:count) ? [:count] : nil count = 2 if count == nil count.times do self.agent(agent, args: [:args]) end # TODO add support for new celluloid supervision pools (when they will be documented, see https://github.com/celluloid/celluloid-supervision) # if count == nil # pool agent, as: name # else # pool agent, as: name, size: count # end end |
.generate_recipe(agent, options = {}) ⇒ Object
endregion DSL
96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 |
# File 'lib/agens/mas.rb', line 96 def self.generate_recipe(agent, = {}) name = nil if .key?(:as) name = [:as] else mas_name = self.name.to_sym agent_name = agent.name.to_sym @@counters[agent_name] ||= 0 @@counters[agent_name] += 1 name = "#{mas_name}_#{agent_name}_#{@@counters[agent_name]}" end AgentConfigRecipe.new(agent, name, [:args]) end |
Instance Method Details
#add_agent(agent, options = {}) ⇒ Object
47 48 49 50 51 52 53 54 55 56 57 |
# File 'lib/agens/mas.rb', line 47 def add_agent(agent, = {}) recipe << self.generate_recipe(agent, ) if !recipe.args.nil? && recipe.args.any? @config.add(type: recipe.type, as: recipe.name, args: recipe.args) else @config.add(type: recipe.type, as: recipe.name) end self end |
#run ⇒ Object
33 34 35 36 |
# File 'lib/agens/mas.rb', line 33 def run puts "Running MAS #{self.class.name}..." @config.deploy end |
#shutdown ⇒ Object
38 39 40 41 |
# File 'lib/agens/mas.rb', line 38 def shutdown puts "Stoping MAS #{self.class.name}..." @config.shutdown end |