romp-rpc 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,115 @@
1
+ # require 'profile'
2
+ require 'romp-rpc'
3
+
4
+ if ARGV.size > 1 or ARGV[0] == "-h" or ARGV[0] == '-H' then
5
+ puts <<END
6
+ Usage: #{$0} <url>
7
+ Example urls:
8
+ tcpromp://localhost:4242
9
+ udpromp://localhost:4242
10
+ unixromp:///tmp/foo
11
+ END
12
+ end
13
+
14
+ url = ARGV[0] || "tcpromp://localhost:4242"
15
+ client = ROMP::Client.new(url, false)
16
+ obj = client.resolve("foo")
17
+
18
+ N = 10
19
+
20
+ # --- Test normal functions ---
21
+ puts "Normal functions, no synchronization"
22
+ GC.start
23
+ start_time = Time.now
24
+ for i in 1..N do
25
+ obj.foo(i)
26
+ end
27
+ obj.sync()
28
+ total_time = Time.now - start_time
29
+ puts " Total time: #{total_time}"
30
+ puts " Messages per second: #{N/total_time}"
31
+
32
+ sleep(1)
33
+
34
+ # --- Test oneway functions ---
35
+ puts "Oneway functions, with synchronization"
36
+ GC.start
37
+ start_time = Time.now
38
+ for i in 1..N do
39
+ obj.oneway_sync(:foo, i)
40
+ # if (i % 1000) == 0 then
41
+ # obj.sync
42
+ # end
43
+ end
44
+ obj.sync()
45
+ total_time = Time.now - start_time
46
+ puts " Total time: #{total_time}"
47
+ puts " Messages per second: #{N/total_time}"
48
+
49
+ puts "You should see the number #{N}:"
50
+ puts obj.i()
51
+
52
+ # -- Test oneway functions without sync ---
53
+ puts "Oneway functions, no synchronization"
54
+ puts "(if this is slow, it is because the TCP buffers are being filled too fast)"
55
+ GC.start
56
+ start_time = Time.now
57
+ for i in 1..N do
58
+ obj.oneway(:foo, i)
59
+ # if (i % 1000) == 0 then
60
+ # obj.sync
61
+ # end
62
+ end
63
+ obj.sync()
64
+ total_time = Time.now - start_time
65
+ puts " Total time: #{total_time}"
66
+ puts " Messages per second: #{N/total_time}"
67
+
68
+ puts "You should see the number #{N}:"
69
+ puts obj.i()
70
+ # --- Test object inspection ---
71
+ puts "You should see an object Foo with an element @i=#{N}"
72
+ puts obj.inspect()
73
+
74
+ # --- Test dup ---
75
+ foo = obj.methods()
76
+ if foo.index("dup") then
77
+ puts "uh oh, shouldn't have found dup"
78
+ end
79
+
80
+ # --- Test resopnd_to for clone ---
81
+ if obj.respond_to?("clone") then
82
+ puts "uh oh, obj should not respond to clone"
83
+ end
84
+
85
+ # --- Test clone ---
86
+ except = false
87
+ begin
88
+ obj.clone()
89
+ rescue NameError
90
+ except = true
91
+ end
92
+ if !except then
93
+ puts "uh oh, I was able to clone obj"
94
+ end
95
+
96
+ # -- Test respond_to for foo ---
97
+ if !obj.respond_to?("foo") then
98
+ puts "uh oh, obj should respond to foo!"
99
+ end
100
+
101
+ # --- Test iterators ---
102
+ puts "You should see the numbers 1, 2, and 3 on separate lines:"
103
+ obj.each do |i|
104
+ puts i
105
+ end
106
+
107
+ # --- Test object references ---
108
+ puts "You should see the number #{obj.i + 1}:"
109
+ b = obj.bar
110
+ puts b.i
111
+ b.release
112
+
113
+ # --- Test exceptions
114
+ puts "You should now see a RuntimeError get thrown:"
115
+ obj.throw_exception()
@@ -0,0 +1,67 @@
1
+ require 'romp-rpc'
2
+
3
+ class Bar
4
+ attr_reader :i
5
+
6
+ def initialize(i, romp)
7
+ @i = i
8
+ @romp = romp
9
+ end
10
+
11
+ def release()
12
+ @romp.delete_reference(self)
13
+ end
14
+ end
15
+
16
+ class Foo < Bar
17
+ # Initialize @i to 0
18
+ def initialize(romp)
19
+ super(0, romp)
20
+ @romp = romp
21
+ end
22
+
23
+ # Set @i
24
+ def foo(i)
25
+ @i = i
26
+ end
27
+
28
+ # Return a reference to a new Bar object with Bar.i = @i + 1
29
+ def bar()
30
+ b = Bar.new(@i + 1, @romp)
31
+ obj = @romp.create_reference(b)
32
+ return obj
33
+ end
34
+
35
+ # Test iteration
36
+ def each()
37
+ yield 1
38
+ yield 2
39
+ yield 3
40
+ end
41
+
42
+ def throw_exception2()
43
+ raise RuntimeError
44
+ end
45
+
46
+ # Test exception
47
+ def throw_exception()
48
+ throw_exception2()
49
+ end
50
+ end
51
+
52
+ if ARGV.size > 1 or ARGV[0] == "-h" or ARGV[0] == '-H' then
53
+ puts <<END
54
+ Usage: #{$0} <url>
55
+ Example urls:
56
+ tcpromp://localhost:4242
57
+ udpromp://localhost:4242
58
+ unixromp:///tmp/foo
59
+ END
60
+ end
61
+
62
+ url = ARGV[0] || "tcpromp://localhost:4242"
63
+ server = ROMP::Server.new(url, false)
64
+
65
+ f = Foo.new(server)
66
+ server.bind(f, "foo")
67
+ server.thread.join
metadata ADDED
@@ -0,0 +1,74 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: romp-rpc
3
+ version: !ruby/object:Gem::Version
4
+ hash: 23
5
+ prerelease:
6
+ segments:
7
+ - 0
8
+ - 2
9
+ - 0
10
+ version: 0.2.0
11
+ platform: ruby
12
+ authors:
13
+ - Paul Brannan
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2012-06-11 00:00:00 Z
19
+ dependencies: []
20
+
21
+ description: |
22
+ ROMP is the Ruby Object Message Proxy. It is sort of like drb
23
+ (distributed Ruby) in that it allows a Ruby client program to
24
+ transparently talk to an object that is sitting on a server.
25
+
26
+ email: curlypaul924@gmail.com
27
+ executables: []
28
+
29
+ extensions:
30
+ - ext/extconf.rb
31
+ extra_rdoc_files:
32
+ - README.md
33
+ files:
34
+ - lib/romp-rpc.rb
35
+ - ext/romp_helper.c
36
+ - ext/extconf.rb
37
+ - sample/client.rb
38
+ - sample/server.rb
39
+ - README.md
40
+ homepage: http://github.com/cout/romp/
41
+ licenses: []
42
+
43
+ post_install_message:
44
+ rdoc_options: []
45
+
46
+ require_paths:
47
+ - lib
48
+ required_ruby_version: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ hash: 3
54
+ segments:
55
+ - 0
56
+ version: "0"
57
+ required_rubygems_version: !ruby/object:Gem::Requirement
58
+ none: false
59
+ requirements:
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ hash: 3
63
+ segments:
64
+ - 0
65
+ version: "0"
66
+ requirements: []
67
+
68
+ rubyforge_project:
69
+ rubygems_version: 1.8.24
70
+ signing_key:
71
+ specification_version: 3
72
+ summary: Ruby Object Message Proxy
73
+ test_files: []
74
+