Sha256: 2284bcaffb323c1abb700a3a6e211811eade3c665ecc3e6712a7aa549b6ca887

Contents?: true

Size: 1.9 KB

Versions: 1

Compression:

Stored size: 1.9 KB

Contents

$:.unshift 'lib'
$:.unshift '../lib'

require 'slave'

class Incrementer
  attr :decrementer, true
  def increment n
    n + 1
  end
  def decrement n
    @decrementer.decrement n
  end
end

class Decrementer
  attr :incrementer, true
  def increment n
    @incrementer.increment n
  end
  def decrement n
    n - 1
  end
end


#
#
# here we set up a triangle of communicating processes
#
#      incrementer------decrementer
#           \               /
#            \             /
#             \           /
#              \         /
#               \       /
#                 parent
#
#

incrementer_slave = Slave::new Incrementer::new
incrementer = incrementer_slave.object 

puts '---'
puts 'incrementer :'
puts "  sockect   : #{ incrementer_slave.socket.inspect }"
puts "  uri       : #{ incrementer_slave.uri.inspect }"
puts "  pid       : #{ incrementer_slave.pid.inspect }"
puts

decrementer_slave = Slave::new Decrementer::new
decrementer = decrementer_slave.object 

puts '---'
puts 'decrementer :'
puts "  sockect   : #{ decrementer_slave.socket.inspect }"
puts "  uri       : #{ decrementer_slave.uri.inspect }"
puts "  pid       : #{ decrementer_slave.pid.inspect }"
puts

#
# connect incrementer and decrementer
#

incrementer.decrementer = decrementer
decrementer.incrementer = incrementer

#
# now we can call methods on each drb object, and they can also call methods on
# each other
#

n = 0 

n = incrementer.increment n
p n #=> 1

n = decrementer.decrement n 
p n #=> 0

n = decrementer.increment n
p n #=> 1

n = incrementer.decrement n
p n #=> 0

#
# we can explicitly shutdown certain slaves
#

incrementer_slave.shutdown
n = decrementer.decrement 43 
p n #=> 42 

#
# Slaves cannot live beyond their parent so we simply exit and all living slaves
# will eventually die.  how long it takes to die is determined by the
# pulse_rate - the next time the Heartbeat trys to ping the parent the Slave
# will die.
#

exit

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
slave-0.0.0 sample/a.rb