msgpack-rpc 0.1.0 → 0.1.1

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.
data/Rakefile CHANGED
@@ -17,7 +17,7 @@ DESCRIPTION = "RPC library using MessagePack, a ainary-based efficient dat
17
17
  RUBYFORGE_PROJECT = "msgpack"
18
18
  HOMEPATH = "http://#{RUBYFORGE_PROJECT}.rubyforge.org"
19
19
  BIN_FILES = %w( )
20
- VERS = "0.1.0"
20
+ VERS = "0.1.1"
21
21
 
22
22
  #REV = File.read(".svn/entries")[/committed-rev="(d+)"/, 1] rescue nil
23
23
  REV = nil
data/lib/msgpack/rpc.rb CHANGED
@@ -282,6 +282,39 @@ class ClientSession
282
282
  end
283
283
 
284
284
 
285
+ class AsyncResult
286
+ def initialize
287
+ @responder = nil
288
+ @sent = false
289
+ end
290
+
291
+ def result(retval, err = nil)
292
+ unless @sent
293
+ if @responder
294
+ @responder.result(retval, err)
295
+ else
296
+ @result = [retval, err]
297
+ end
298
+ @sent = true
299
+ end
300
+ nil
301
+ end
302
+
303
+ def error(err)
304
+ result(nil, err)
305
+ nil
306
+ end
307
+
308
+ def responder=(res)
309
+ @responder = res
310
+ if @sent && @result
311
+ @responder.result(*@result)
312
+ @result = nil
313
+ end
314
+ end
315
+ end
316
+
317
+
285
318
  class ServerSession
286
319
  def initialize(obj, accept = obj.public_methods)
287
320
  @obj = obj
@@ -302,7 +335,11 @@ class ServerSession
302
335
  res.error($!.to_s)
303
336
  return
304
337
  end
305
- res.result(ret)
338
+ if ret.is_a?(AsyncResult)
339
+ ret.responder = res
340
+ else
341
+ res.result(ret)
342
+ end
306
343
  end
307
344
 
308
345
  def on_notify(method, param)
@@ -323,6 +360,8 @@ end
323
360
  Loop = ::Rev::Loop
324
361
 
325
362
  module LoopUtil
363
+ attr_reader :loop
364
+
326
365
  class Timer < Rev::TimerWatcher
327
366
  def initialize(interval, repeating, &block)
328
367
  @block = block
@@ -361,7 +400,7 @@ class Client
361
400
  @timer = Timer.new(1, true) { @s.step_timeout }
362
401
  loop.attach(@timer)
363
402
  end
364
- attr_reader :loop, :host, :port
403
+ attr_reader :host, :port
365
404
 
366
405
  def close
367
406
  @timer.detach
@@ -411,7 +450,6 @@ class Server
411
450
  @loop = loop
412
451
  @socks = []
413
452
  end
414
- attr_reader :loop
415
453
 
416
454
  def listen(host, port, obj, accept = obj.public_methods)
417
455
  lsock = ::Rev::TCPServer.new(host, port, Server::Socket, obj, accept)
@@ -7,6 +7,10 @@ $port = 65500
7
7
  class MessagePackRPCTest < Test::Unit::TestCase
8
8
 
9
9
  class MyServer
10
+ def initialize(svr)
11
+ @svr = svr
12
+ end
13
+
10
14
  def hello
11
15
  "ok"
12
16
  end
@@ -19,6 +23,22 @@ class MessagePackRPCTest < Test::Unit::TestCase
19
23
  raise "raised"
20
24
  end
21
25
 
26
+ def async
27
+ as = MessagePack::RPC::AsyncResult.new
28
+ @svr.start_timer(1, false) do
29
+ as.result "async"
30
+ end
31
+ as
32
+ end
33
+
34
+ def async_exception
35
+ as = MessagePack::RPC::AsyncResult.new
36
+ @svr.start_timer(1, false) do
37
+ as.error "async"
38
+ end
39
+ as
40
+ end
41
+
22
42
  private
23
43
  def hidden
24
44
  end
@@ -29,21 +49,33 @@ class MessagePackRPCTest < Test::Unit::TestCase
29
49
  port = $port += 1
30
50
 
31
51
  svr = MessagePack::RPC::Server.new
32
- svr.listen("0.0.0.0", port, MyServer.new)
52
+ svr.listen("0.0.0.0", port, MyServer.new(svr))
33
53
  svr.close
34
54
  end
35
55
 
36
56
 
37
- def test_call
57
+ def next_port
38
58
  port = $port += 1
59
+ end
60
+
61
+ def start_server
62
+ port = next_port
39
63
 
40
64
  svr = MessagePack::RPC::Server.new
41
- svr.listen("0.0.0.0", port, MyServer.new)
65
+ svr.listen("0.0.0.0", port, MyServer.new(svr))
42
66
  Thread.start do
43
67
  svr.run
44
68
  end
45
69
 
46
70
  cli = MessagePack::RPC::Client.new("127.0.0.1", port)
71
+ cli.timeout = 10
72
+
73
+ return svr, cli
74
+ end
75
+
76
+
77
+ def test_call
78
+ svr, cli = start_server
47
79
 
48
80
  result = cli.call(:hello)
49
81
  assert_equal(result, "ok")
@@ -59,12 +91,13 @@ class MessagePackRPCTest < Test::Unit::TestCase
59
91
  port = $port += 1
60
92
 
61
93
  svr = MessagePack::RPC::Server.new
62
- svr.listen("0.0.0.0", port, MyServer.new)
94
+ svr.listen("0.0.0.0", port, MyServer.new(svr))
63
95
  Thread.start do
64
96
  svr.run
65
97
  end
66
98
 
67
99
  cli = MessagePack::RPC::Client.new("127.0.0.1", port)
100
+ cli.timeout = 10
68
101
 
69
102
  req1 = cli.send(:hello)
70
103
  req2 = cli.send(:sum, 1, 2)
@@ -82,18 +115,10 @@ class MessagePackRPCTest < Test::Unit::TestCase
82
115
 
83
116
 
84
117
  def test_callback
85
- port = $port += 1
86
-
87
- svr = MessagePack::RPC::Server.new
88
- svr.listen("0.0.0.0", port, MyServer.new)
89
- Thread.start do
90
- svr.run
91
- end
118
+ svr, cli = start_server
92
119
 
93
120
  count = 0
94
121
 
95
- cli = MessagePack::RPC::Client.new("127.0.0.1", port)
96
-
97
122
  cli.callback(:hello) do |error, result|
98
123
  assert_equal(result, "ok")
99
124
  assert_nil(error)
@@ -115,18 +140,10 @@ class MessagePackRPCTest < Test::Unit::TestCase
115
140
 
116
141
 
117
142
  def test_hidden
118
- port = $port += 1
119
-
120
- svr = MessagePack::RPC::Server.new
121
- svr.listen("0.0.0.0", port, MyServer.new)
122
- Thread.start do
123
- svr.run
124
- end
143
+ svr, cli = start_server
125
144
 
126
145
  count = 0
127
146
 
128
- cli = MessagePack::RPC::Client.new("127.0.0.1", port)
129
-
130
147
  rejected = false
131
148
  begin
132
149
  cli.call(:hidden)
@@ -141,21 +158,40 @@ class MessagePackRPCTest < Test::Unit::TestCase
141
158
 
142
159
 
143
160
  def test_exception
144
- port = $port += 1
161
+ svr, cli = start_server
145
162
 
146
- svr = MessagePack::RPC::Server.new
147
- svr.listen("0.0.0.0", port, MyServer.new)
148
- Thread.start do
149
- svr.run
163
+ raised = false
164
+ begin
165
+ cli.call(:exception)
166
+ rescue MessagePack::RPC::RemoteError
167
+ assert_equal($!.message, "raised")
168
+ raised = true
150
169
  end
151
170
 
152
- cli = MessagePack::RPC::Client.new("127.0.0.1", port)
171
+ assert_equal(raised, true)
172
+
173
+ cli.close
174
+ end
175
+
176
+
177
+ def test_async
178
+ svr, cli = start_server
179
+
180
+ result = cli.call(:async)
181
+ assert_equal(result, "async")
182
+
183
+ cli.close
184
+ end
185
+
186
+
187
+ def test_async_exception
188
+ svr, cli = start_server
153
189
 
154
190
  raised = false
155
191
  begin
156
- cli.call(:exception)
192
+ cli.call(:async_exception)
157
193
  rescue MessagePack::RPC::RemoteError
158
- assert_equal($!.message, "raised")
194
+ assert_equal($!.message, "async")
159
195
  raised = true
160
196
  end
161
197
 
@@ -166,15 +202,15 @@ class MessagePackRPCTest < Test::Unit::TestCase
166
202
 
167
203
 
168
204
  def test_loop
169
- port = $port += 1
205
+ port = next_port
170
206
 
171
207
  loop = MessagePack::RPC::Loop.new
172
208
 
173
209
  svr = MessagePack::RPC::Server.new(loop)
174
- svr.listen("0.0.0.0", port, MyServer.new)
210
+ svr.listen("0.0.0.0", port, MyServer.new(svr))
175
211
 
176
212
  cli = MessagePack::RPC::Client.new("127.0.0.1", port, loop)
177
- cli.timeout = 1
213
+ cli.timeout = 10
178
214
 
179
215
  count = 0
180
216
 
@@ -200,7 +236,7 @@ class MessagePackRPCTest < Test::Unit::TestCase
200
236
 
201
237
 
202
238
  def test_timeout
203
- port = $port += 1
239
+ port = next_port
204
240
 
205
241
  lsock = TCPServer.new("0.0.0.0", port)
206
242
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: msgpack-rpc
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - FURUHASHI Sadayuki