class EM::RocketIO::Linda::Client::TupleSpace

Attributes

linda[R]
name[R]

Public Class Methods

new(name, linda) click to toggle source
# File lib/em-rocketio-linda-client/client.rb, line 28
def initialize(name, linda)
  @name = name
  @linda = linda
end

Public Instance Methods

list(tuple, &block) click to toggle source
# File lib/em-rocketio-linda-client/client.rb, line 98
def list(tuple, &block)
  unless [Hash, Array].include? tuple.class
    raise ArgumentError, "tuple must be Array or Hash"
  end
  callback_id = make_callback_id
  if block_given?
    @linda.io.once "__linda_list_callback_#{callback_id}" do |list|
      block.call list
    end
    @linda.io.push "__linda_list", [@name, tuple, callback_id]
    return
  end
  results = nil
  @linda.io.once "__linda_list_callback_#{callback_id}" do |list|
    results = list
  end
  @linda.io.push "__linda_list", [@name, tuple, callback_id]
  while results == nil do
    sleep 0.1
  end
  return results
end
read(tuple, &block) click to toggle source
# File lib/em-rocketio-linda-client/client.rb, line 40
def read(tuple, &block)
  unless [Hash, Array].include? tuple.class
    raise ArgumentError, "tuple must be Array or Hash"
  end
  callback_id = make_callback_id
  if block_given?
    @linda.io.once "__linda_read_callback_#{callback_id}" do |data|
      block.call(data['tuple'], TupleInfo.new(data['info']))
    end
    @linda.io.push "__linda_read", [@name, tuple, callback_id]
    return
  end
  result_tuple = nil
  @linda.io.once "__linda_read_callback_#{callback_id}" do |data|
    result_tuple = data['tuple']
  end
  @linda.io.push "__linda_read", [@name, tuple, callback_id]
  while !result_tuple do
    sleep 0.1
  end
  return result_tuple
end
take(tuple, &block) click to toggle source
# File lib/em-rocketio-linda-client/client.rb, line 63
def take(tuple, &block)
  unless [Hash, Array].include? tuple.class
    raise ArgumentError, "tuple must be Array or Hash"
  end
  callback_id = make_callback_id
  if block_given?
    @linda.io.once "__linda_take_callback_#{callback_id}" do |data|
      block.call data['tuple'], TupleInfo.new(data['info'])
    end
    @linda.io.push "__linda_take", [@name, tuple, callback_id]
    return
  end
  result_tuple = nil
  @linda.io.once "__linda_take_callback_#{callback_id}" do |data|
    result_tuple = data['tuple']
  end
  @linda.io.push "__linda_take", [@name, tuple, callback_id]
  while !result_tuple do
    sleep 0.1
  end
  return result_tuple
end
watch(tuple, &block) click to toggle source
# File lib/em-rocketio-linda-client/client.rb, line 86
def watch(tuple, &block)
  unless [Hash, Array].include? tuple.class
    raise ArgumentError, "tuple must be Array or Hash"
  end
  return unless block_given?
  callback_id = make_callback_id
  @linda.io.on "__linda_watch_callback_#{callback_id}" do |data|
    block.call data['tuple'], TupleInfo.new(data['info'])
  end
  @linda.io.push "__linda_watch", [@name, tuple, callback_id]
end
write(tuple, opts={}) click to toggle source
# File lib/em-rocketio-linda-client/client.rb, line 33
def write(tuple, opts={})
  unless [Hash, Array].include? tuple.class
    raise ArgumentError, "tuple must be Array or Hash"
  end
  @linda.io.push "__linda_write", [@name, tuple, opts]
end

Private Instance Methods

make_callback_id() click to toggle source
# File lib/em-rocketio-linda-client/client.rb, line 122
def make_callback_id
  "#{Time.now.to_i}#{Time.now.usec}_#{rand(1000000).to_i}"
end