msgpack-rpc 0.1.1 → 0.1.2

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.1"
20
+ VERS = "0.1.2"
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
@@ -1,5 +1,5 @@
1
1
  #
2
- # MessagePack RPC for Ruby
2
+ # MessagePack-RPC for Ruby
3
3
  #
4
4
  # Copyright (C) 2009 FURUHASHI Sadayuki
5
5
  #
@@ -74,11 +74,12 @@ module RPCSocket
74
74
  end
75
75
 
76
76
  def on_message(msg)
77
- if msg[0] == REQUEST
77
+ case msg[0]
78
+ when REQUEST
78
79
  on_request(msg[1], msg[2], msg[3])
79
- elsif msg[0] == RESPONSE
80
- on_response(msg[1], msg[3], msg[2])
81
- elsif msg[0] == REQUEST
80
+ when RESPONSE
81
+ on_response(msg[1], msg[2], msg[3])
82
+ when NOTIFY
82
83
  on_notify(msg[1], msg[2])
83
84
  else
84
85
  raise RPCError.new("unknown message type #{msg[0]}")
@@ -103,17 +104,17 @@ module RPCSocket
103
104
  @session.on_notify(method, param)
104
105
  end
105
106
 
106
- def on_response(msgid, res, err)
107
+ def on_response(msgid, error, result)
107
108
  return unless @session
108
- @session.on_response(msgid, res, err)
109
+ @session.on_response(msgid, error, result)
109
110
  end
110
111
 
111
112
  def send_request(msgid, method, param)
112
113
  send_message [REQUEST, msgid, method, param]
113
114
  end
114
115
 
115
- def send_response(msgid, retval, err)
116
- send_message [RESPONSE, msgid, err, retval]
116
+ def send_response(msgid, result, error)
117
+ send_message [RESPONSE, msgid, error, result]
117
118
  end
118
119
 
119
120
  def send_notify(method, param)
@@ -233,7 +234,7 @@ class ClientSession
233
234
  end
234
235
 
235
236
 
236
- def on_response(msgid, result, error)
237
+ def on_response(msgid, error, result)
237
238
  if req = @reqtable.delete(msgid)
238
239
  req.call error, result
239
240
  end
@@ -278,6 +279,7 @@ class ClientSession
278
279
  def notify_real(method, param)
279
280
  method = method.to_s unless method.is_a?(Integer)
280
281
  @sock.send_notify method, param
282
+ nil
281
283
  end
282
284
  end
283
285
 
@@ -327,24 +329,21 @@ class ServerSession
327
329
 
328
330
  def on_request(method, param, res)
329
331
  begin
330
- unless @accept.include?(method)
331
- raise NoMethodError, "method `#{method}' is not accepted"
332
- end
333
- ret = @obj.send(method, *param)
332
+ result = forward_method(method, param)
334
333
  rescue
335
334
  res.error($!.to_s)
336
335
  return
337
336
  end
338
- if ret.is_a?(AsyncResult)
339
- ret.responder = res
337
+ if result.is_a?(AsyncResult)
338
+ result.responder = res
340
339
  else
341
- res.result(ret)
340
+ res.result(result)
342
341
  end
343
342
  end
344
343
 
345
344
  def on_notify(method, param)
346
- # FIXME notify support
347
- raise RPCError.new("unexpected notify message")
345
+ forward_method(method, param)
346
+ rescue
348
347
  end
349
348
 
350
349
  def on_response(msgid, error, result)
@@ -355,6 +354,14 @@ class ServerSession
355
354
  # do nothing
356
355
  @sock = nil
357
356
  end
357
+
358
+ private
359
+ def forward_method(method, param)
360
+ unless @accept.include?(method)
361
+ raise NoMethodError, "method `#{method}' is not accepted"
362
+ end
363
+ @obj.send(method, *param)
364
+ end
358
365
  end
359
366
 
360
367
  Loop = ::Rev::Loop
@@ -382,8 +389,9 @@ module LoopUtil
382
389
 
383
390
  def stop
384
391
  @loop.stop
385
- # attach dummy timer
386
- @loop.attach Rev::TimerWatcher.new(0, false)
392
+ # attach/detach dummy timer
393
+ @loop.attach(Rev::TimerWatcher.new(0, false)).detach
394
+ nil
387
395
  end
388
396
  end
389
397
 
@@ -406,6 +414,7 @@ class Client
406
414
  @timer.detach
407
415
  @rsock.detach
408
416
  @s.close
417
+ nil
409
418
  end
410
419
 
411
420
  def send(method, *args)
@@ -463,6 +472,7 @@ class Server
463
472
  lsock.close
464
473
  true
465
474
  }
475
+ nil
466
476
  end
467
477
 
468
478
  include LoopUtil
@@ -45,8 +45,13 @@ class MessagePackRPCTest < Test::Unit::TestCase
45
45
  end
46
46
 
47
47
 
48
- def test_listen
48
+ def next_port
49
49
  port = $port += 1
50
+ end
51
+
52
+
53
+ def test_listen
54
+ port = next_port
50
55
 
51
56
  svr = MessagePack::RPC::Server.new
52
57
  svr.listen("0.0.0.0", port, MyServer.new(svr))
@@ -54,10 +59,6 @@ class MessagePackRPCTest < Test::Unit::TestCase
54
59
  end
55
60
 
56
61
 
57
- def next_port
58
- port = $port += 1
59
- end
60
-
61
62
  def start_server
62
63
  port = next_port
63
64
 
@@ -65,6 +66,7 @@ class MessagePackRPCTest < Test::Unit::TestCase
65
66
  svr.listen("0.0.0.0", port, MyServer.new(svr))
66
67
  Thread.start do
67
68
  svr.run
69
+ svr.close
68
70
  end
69
71
 
70
72
  cli = MessagePack::RPC::Client.new("127.0.0.1", port)
@@ -84,20 +86,12 @@ class MessagePackRPCTest < Test::Unit::TestCase
84
86
  assert_equal(result, 3)
85
87
 
86
88
  cli.close
89
+ svr.stop
87
90
  end
88
91
 
89
92
 
90
93
  def test_send
91
- port = $port += 1
92
-
93
- svr = MessagePack::RPC::Server.new
94
- svr.listen("0.0.0.0", port, MyServer.new(svr))
95
- Thread.start do
96
- svr.run
97
- end
98
-
99
- cli = MessagePack::RPC::Client.new("127.0.0.1", port)
100
- cli.timeout = 10
94
+ svr, cli = start_server
101
95
 
102
96
  req1 = cli.send(:hello)
103
97
  req2 = cli.send(:sum, 1, 2)
@@ -111,6 +105,7 @@ class MessagePackRPCTest < Test::Unit::TestCase
111
105
  assert_nil(req2.error)
112
106
 
113
107
  cli.close
108
+ svr.stop
114
109
  end
115
110
 
116
111
 
@@ -135,6 +130,17 @@ class MessagePackRPCTest < Test::Unit::TestCase
135
130
  cli.loop.run_once
136
131
  end
137
132
 
133
+ cli.close
134
+ svr.stop
135
+ end
136
+
137
+
138
+ def test_notify
139
+ svr, cli = start_server
140
+
141
+ cli.notify(:hello)
142
+ cli.notify(:sum, 1, 2)
143
+
138
144
  cli.close
139
145
  end
140
146
 
@@ -154,6 +160,7 @@ class MessagePackRPCTest < Test::Unit::TestCase
154
160
  assert_equal(rejected, true)
155
161
 
156
162
  cli.close
163
+ svr.stop
157
164
  end
158
165
 
159
166
 
@@ -171,6 +178,7 @@ class MessagePackRPCTest < Test::Unit::TestCase
171
178
  assert_equal(raised, true)
172
179
 
173
180
  cli.close
181
+ svr.stop
174
182
  end
175
183
 
176
184
 
@@ -181,6 +189,7 @@ class MessagePackRPCTest < Test::Unit::TestCase
181
189
  assert_equal(result, "async")
182
190
 
183
191
  cli.close
192
+ svr.stop
184
193
  end
185
194
 
186
195
 
@@ -198,6 +207,7 @@ class MessagePackRPCTest < Test::Unit::TestCase
198
207
  assert_equal(raised, true)
199
208
 
200
209
  cli.close
210
+ svr.stop
201
211
  end
202
212
 
203
213
 
@@ -255,6 +265,5 @@ class MessagePackRPCTest < Test::Unit::TestCase
255
265
  cli.close
256
266
  lsock.close
257
267
  end
258
-
259
268
  end
260
269
 
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.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - FURUHASHI Sadayuki
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-10-18 00:00:00 +09:00
12
+ date: 2009-10-19 00:00:00 +09:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency