Class: Rinda::TupleSpaceProxy::Port

Inherits:
Object
  • Object
show all
Defined in:
lib/rinda2/rinda.rb

Overview

A Port ensures that a moved tuple arrives properly at its destination and does not get lost.

See bugs.ruby-lang.org/issues/8125

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initializePort

Returns a new instance of Port.



195
196
197
198
# File 'lib/rinda2/rinda.rb', line 195

def initialize
  @open = true
  @value = nil
end

Instance Attribute Details

#valueObject (readonly)

:nodoc:



181
182
183
# File 'lib/rinda2/rinda.rb', line 181

def value
  @value
end

Class Method Details

.deliverObject



183
184
185
186
187
188
189
190
191
192
193
# File 'lib/rinda2/rinda.rb', line 183

def self.deliver
  port = new

  begin
    yield(port)
  ensure
    port.close
  end

  port.value
end

Instance Method Details

#closeObject

Don’t let the DRb thread push to it when remote sends tuple



203
204
205
# File 'lib/rinda2/rinda.rb', line 203

def close
  @open = false
end

#push(value) ⇒ Object

Stores value and ensure it does not get marshaled multiple times.



210
211
212
213
214
215
216
# File 'lib/rinda2/rinda.rb', line 210

def push value
  raise 'port closed' unless @open

  @value = value

  nil # avoid Marshal
end