1require 'drb/drb' 2require 'drb/extserv' 3require 'timeout' 4 5class XArray < Array 6 def initialize(ary) 7 ary.each do |x| 8 self.push(x) 9 end 10 end 11end 12 13class XArray2 < XArray 14 include DRbUndumped 15end 16 17class Unknown2 18 def initialize 19 @foo = 'unknown2' 20 end 21end 22 23class DRbEx 24 include DRbUndumped 25 26 class FooBar 27 def initialize 28 @foo = 'bar' 29 end 30 end 31 32 class UError < RuntimeError; end 33 34 def initialize 35 @xary2_hash = nil 36 @hash = nil 37 @hello = 'hello' 38 end 39 attr_reader :hello 40 41 def sample(a, b, c) 42 a.to_i + b.to_i + c.to_i 43 end 44 45 def sum(*a) 46 s = 0 47 a.each do |e| 48 s += e.to_i 49 end 50 s 51 end 52 53 def do_timeout(n) 54 timeout(0.1) do 55 n.sleep(2) 56 end 57 end 58 59 def unknown_module 60 FooBar.new 61 end 62 63 def unknown_class 64 Unknown2.new 65 end 66 67 def unknown_error 68 raise UError 69 end 70 71 def remote_no_method_error 72 invoke_no_method(self) 73 end 74 75 def test_yield 76 yield 77 yield([]) 78 yield(*[]) 79 end 80 81 def echo_yield(*arg) 82 yield(*arg) 83 nil 84 end 85 86 def echo_yield_0 87 yield 88 nil 89 end 90 91 def echo_yield_1(one) 92 yield(one) 93 nil 94 end 95 96 def echo_yield_2(one, two) 97 yield(one, two) 98 nil 99 end 100 101 def xarray_each 102 xary = [XArray.new([0])] 103 xary.each do |x| 104 yield(x) 105 end 106 nil 107 end 108 109 def xarray2_hash 110 unless @xary2_hash 111 @xary2_hash = { "a" => XArray2.new([0]), "b" => XArray2.new([1]) } 112 end 113 DRbObject.new(@xary2_hash) 114 end 115 116 def simple_hash 117 unless @hash 118 @hash = { 'a'=>:a, 'b'=>:b } 119 end 120 DRbObject.new(@hash) 121 end 122 123 def [](key) 124 key.to_s 125 end 126 127 def to_a 128 [self] 129 end 130 131 def method_missing(msg, *a, &b) 132 if msg == :missing 133 return true 134 else 135 super(msg, *a, &b) 136 end 137 end 138 139 private 140 def call_private_method 141 true 142 end 143 144 protected 145 def call_protected_method 146 true 147 end 148end 149 150if __FILE__ == $0 151 def ARGV.shift 152 it = super() 153 raise "usage: #{$0} <manager-uri> <name>" unless it 154 it 155 end 156 157 DRb::DRbServer.default_argc_limit(8) 158 DRb::DRbServer.default_load_limit(4096) 159 DRb.start_service('druby://localhost:0', DRbEx.new) 160 es = DRb::ExtServ.new(ARGV.shift, ARGV.shift) 161 DRb.thread.join 162 es.stop_service if es.alive? 163end 164