require 'drb/drb' require 'rinda/rinda' ## require 'nqueen' class NQEngine def initialize(ts) @ts = ts end def main_loop while true sym, key, size, board, row, stream = take_request begin p [key, row] if $DEBUG do_it(key, size, board, row, stream) rescue ensure write_done(key) end end end def do_it(key, size, board, row, stream) NQueen.nqueen(size, board, row) do |x| stream.push(x) end end def take_request @ts.take([:nqueen, nil, Integer, Array, Integer, nil]) end def write_done(key, timeout=30) @ts.write([:nqueen_done, key], timeout) end end if __FILE__ == $0 DRb.start_service ts_uri = ARGV.shift || raise ts = DRbObject.new(nil, ts_uri) engine = NQEngine.new(Rinda::TupleSpaceProxy.new(ts)) ## engine.main_loop end