/usr/share/doc/ruby1.8-examples/examples/drb/name.rb is in ruby1.8-examples 1.8.7.352-2ubuntu1.6.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 | =begin
distributed Ruby --- NamedObject Sample
Copyright (c) 2000-2001 Masatoshi SEKI
=end
=begin
How to play.
* start server
Terminal 1
| % ruby name.rb druby://yourhost:7640
| druby://yourhost:7640
| [return] to exit
* start client
Terminal 2
| % ruby namec.rb druby://yourhost:7640
| #<DRb::DRbObject:0x40164174 @uri="druby://yourhost:7640", @ref="seq">
| #<DRb::DRbObject:0x40163c9c @uri="druby://yourhost:7640", @ref="mutex">
| 1
| 2
| [return] to continue
* restart server
Terminal 1
type [return]
| % ruby name.rb druby://yourhost:7640
| druby://yourhost:7640
| [return] to exit
* continue client
Terminal 2
type [return]
| 1
| 2
=end
require 'thread.rb'
require 'drb/drb'
module DRbNamedObject
DRbNAMEDICT = {}
attr_reader(:drb_name)
def drb_name=(name)
@drb_name = name
Thread.exclusive do
raise(IndexError, name) if DRbNAMEDICT[name]
DRbNAMEDICT[name] = self
end
end
end
class DRbNamedIdConv < DRb::DRbIdConv
def initialize
@dict = DRbNamedObject::DRbNAMEDICT
end
def to_obj(ref)
@dict.fetch(ref) do super end
end
def to_id(obj)
if obj.kind_of? DRbNamedObject
return obj.drb_name
else
return super
end
end
end
class Seq
include DRbUndumped
include DRbNamedObject
def initialize(v, name)
@counter = v
@mutex = Mutex.new
self.drb_name = name
end
def next_value
@mutex.synchronize do
@counter += 1
return @counter
end
end
end
class Front
def initialize
seq = Seq.new(0, 'seq')
mutex = Mutex.new
mutex.extend(DRbUndumped)
mutex.extend(DRbNamedObject)
mutex.drb_name = 'mutex'
@name = {}
@name['seq'] = seq
@name['mutex'] = mutex
end
def [](k)
@name[k]
end
end
if __FILE__ == $0
uri = ARGV.shift
name_conv = DRbNamedIdConv.new
DRb.install_id_conv(name_conv)
DRb.start_service(uri, Front.new)
puts DRb.uri
DRb.thread.join
end
|