Class: Artoo::Master

Inherits:
Object
  • Object
show all
Includes:
Celluloid
Defined in:
lib/artoo/master.rb

Overview

The Artoo::Master class is a registered supervisor class to keep track of all the running robots

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(bots = []) ⇒ Master

Create new master

Parameters:

  • robots (Collection)


61
62
63
64
65
# File 'lib/artoo/master.rb', line 61

def initialize(bots=[])
  @robots = []
  @commands = []
  assign(bots)
end

Instance Attribute Details

#robotsObject (readonly)

Returns the value of attribute robots.



6
7
8
# File 'lib/artoo/master.rb', line 6

def robots
  @robots
end

Class Method Details

.add_command(name, behaviour) ⇒ Object



49
50
51
# File 'lib/artoo/master.rb', line 49

def add_command(name, behaviour)
  current.add_command(name, behaviour)
end

.assign(bots = []) ⇒ Object



13
14
15
# File 'lib/artoo/master.rb', line 13

def assign(bots=[])
  current.assign(bots)
end

.command(name, params) ⇒ Object



45
46
47
# File 'lib/artoo/master.rb', line 45

def command(name, params)
  current.command(name, params)
end

.commandsObject



53
54
55
# File 'lib/artoo/master.rb', line 53

def commands
  current.commands
end

.continue_workObject



41
42
43
# File 'lib/artoo/master.rb', line 41

def continue_work
  current.continue_work
end

.currentObject



9
10
11
# File 'lib/artoo/master.rb', line 9

def current
  Celluloid::Actor[:master] ||= self.new
end

.pause_workObject



37
38
39
# File 'lib/artoo/master.rb', line 37

def pause_work
  current.pause_work
end

.robot(name) ⇒ Object



21
22
23
# File 'lib/artoo/master.rb', line 21

def robot(name)
  current.robot(name)
end

.robot?(name) ⇒ Boolean

Returns:

  • (Boolean)


25
26
27
# File 'lib/artoo/master.rb', line 25

def robot?(name)
  current.robot?(name)
end

.robotsObject



17
18
19
# File 'lib/artoo/master.rb', line 17

def robots
  current.robots
end

.start_workObject



29
30
31
# File 'lib/artoo/master.rb', line 29

def start_work
  current.start_work
end

.stop_workObject



33
34
35
# File 'lib/artoo/master.rb', line 33

def stop_work
  current.stop_work
end

Instance Method Details

#add_command(name, behaviour) ⇒ Object

add command to master



153
154
155
# File 'lib/artoo/master.rb', line 153

def add_command(name, behaviour)
  @commands << { name: name.to_sym, behaviour: behaviour }
end

#assign(bots = []) ⇒ Object

Assign robots to Master controller

Parameters:

  • robots (Collection)


69
70
71
72
# File 'lib/artoo/master.rb', line 69

def assign(bots=[])
  robots.concat(bots)
  bots.each {|r| r.async.work} if Artoo::Robot.is_running?
end

#command(name, params) ⇒ Object

execute master command



141
142
143
144
145
146
147
148
149
150
# File 'lib/artoo/master.rb', line 141

def command(name, params)
  command = @commands.find{ |c| c[:name] == name.to_sym }
  if command
    if params.nil?
      command[:behaviour].call
    else
      command[:behaviour].call(params)
    end
  end
end

#commandsObject

return list of master command names



136
137
138
# File 'lib/artoo/master.rb', line 136

def commands
  @commands.map{ |c| c[:name] }
end

#continue_workObject

Continue work for each robot



125
126
127
# File 'lib/artoo/master.rb', line 125

def continue_work
  robots.each {|r| r.async.continue_work}
end

#pause_workObject

Pause work for each robot



117
118
119
120
121
122
# File 'lib/artoo/master.rb', line 117

def pause_work
  robots.each {|r|
    Logger.info "pausing #{r.name}"
    r.async.pause_work
  }
end

#robot(name) ⇒ Robot

Returns robot.

Parameters:

  • name (String)

Returns:



76
77
78
# File 'lib/artoo/master.rb', line 76

def robot(name)
  robots.find {|r| r.name == name}
end

#robot?(name) ⇒ Boolean

Returns:

  • (Boolean)


80
81
82
# File 'lib/artoo/master.rb', line 80

def robot?(name)
  robots.find {|r| r.name == name}
end

#robot_connection(robot_id, connection_id) ⇒ Device

Returns robot connection.

Parameters:

  • robot_id (String)
  • connection_id (String)

Returns:

  • (Device)

    robot connection



106
107
108
# File 'lib/artoo/master.rb', line 106

def robot_connection(robot_id, connection_id)
  robot_connections(robot_id)[connection_id.intern]
end

#robot_connections(name) ⇒ Collection

Returns robot connections.

Parameters:

  • name (String)

Returns:

  • (Collection)

    robot connections



99
100
101
# File 'lib/artoo/master.rb', line 99

def robot_connections(name)
  robot(name).connections
end

#robot_device(name, device_id) ⇒ Device

Returns robot device.

Parameters:

  • name (String)
  • device_id (String)

Returns:



93
94
95
# File 'lib/artoo/master.rb', line 93

def robot_device(name, device_id)
  robot_devices(name)[device_id.intern]
end

#robot_devices(name) ⇒ Collection

Returns robot devices.

Parameters:

  • name (String)

Returns:

  • (Collection)

    robot devices



86
87
88
# File 'lib/artoo/master.rb', line 86

def robot_devices(name)
  robot(name).devices
end

#start_workObject

Do asynchronous work for each robot



111
112
113
114
# File 'lib/artoo/master.rb', line 111

def start_work
  robots.each {|r| r.async.work} unless Artoo::Robot.is_running?
  Artoo::Robot.running!
end

#stop_workObject

terminate all robots



130
131
132
133
# File 'lib/artoo/master.rb', line 130

def stop_work
  robots.each {|r| r.terminate} unless !Artoo::Robot.is_running?
  Artoo::Robot.stopped!
end