Object
A RingServer allows a Rinda::TupleSpace to be located via UDP broadcasts. Service location uses the following steps:
A RingServer begins listening on the broadcast UDP address.
A RingFinger sends a UDP packet containing the DRb URI where it will listen for a reply.
The RingServer receives the UDP packet and connects back to the provided DRb URI with the DRb service.
Pulls lookup tuples out of the TupleSpace and sends their DRb object the address of the local TupleSpace.
# File rinda/ring.rb, line 82
def do_reply
tuple = @ts.take([:lookup_ring, DRbObject])
Thread.new { tuple[1].call(@ts) rescue nil}
rescue
end
Extracts the response URI from msg and adds it to TupleSpace where it will be picked up by reply_service for notification.
# File rinda/ring.rb, line 57
def do_write(msg)
Thread.new do
begin
tuple, sec = Marshal.load(msg)
@ts.write(tuple, sec)
rescue
end
end
end
Creates a thread that notifies waiting clients from the TupleSpace.
# File rinda/ring.rb, line 70
def reply_service
Thread.new do
loop do
do_reply
end
end
end
Creates a thread that picks up UDP packets and passes them to do_write for decoding.
# File rinda/ring.rb, line 44
def write_service
Thread.new do
loop do
msg = @soc.recv(1024)
do_write(msg)
end
end
end