Class: EM::RocketIO::Linda::Client::TupleSpace

Inherits:
Object
  • Object
show all
Defined in:
lib/em-rocketio-linda-client/client.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name, linda) ⇒ TupleSpace

Returns a new instance of TupleSpace.



28
29
30
31
# File 'lib/em-rocketio-linda-client/client.rb', line 28

def initialize(name, linda)
  @name = name
  @linda = linda
end

Instance Attribute Details

#lindaObject (readonly)

Returns the value of attribute linda.



27
28
29
# File 'lib/em-rocketio-linda-client/client.rb', line 27

def linda
  @linda
end

#nameObject (readonly)

Returns the value of attribute name.



27
28
29
# File 'lib/em-rocketio-linda-client/client.rb', line 27

def name
  @name
end

Instance Method Details

#list(tuple, &block) ⇒ Object



98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
# 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) ⇒ Object



40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# 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) ⇒ Object



63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
# 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) ⇒ Object



86
87
88
89
90
91
92
93
94
95
96
# 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 = {}) ⇒ Object



33
34
35
36
37
38
# 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