elrpc 0.0.6 → 0.0.7

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f0842836d2200968a4a098eda7ba03664cce8aa7
4
- data.tar.gz: 53583612a724a0570cd9e072d6401bd3e4d560b7
3
+ metadata.gz: f891bac71044cc7a7eb77f745da3318981f68f17
4
+ data.tar.gz: 0ad1e5a241187431b3c428e547df86f77e7a6ff5
5
5
  SHA512:
6
- metadata.gz: 58e64d2116678181e6ae2880ea22050714c26c711deac3e5e896132a901612e3afe234d43168e0d52128ea7fba3e8e9b1e482d8046ca7e09a8e5f92ef5216af5
7
- data.tar.gz: 39465ff5784968f8495f53329dac6eb393cb408417008c1e02ed365771a3e7bc77d21a98b4b8c3001e72fe5063e9325cabc5c1514a4c546018c11f356bb6dfec
6
+ metadata.gz: dd8e7eb9fddef97c449441f183a3c4db452416ac748f2ab6389838530b72149ba930f8e56c6c9a2a9249c06a253e7cec9049a41fddebce08173298c523649e83
7
+ data.tar.gz: fb851ee98b9597cdc4df267cac633918ecce636a4304a2f24448894f544e800977ad9d0d39372a3a4cbc3335a03f595be82f8c03cd67ff625149c4b553ae72a9
data/lib/elrpc.rb CHANGED
@@ -106,6 +106,10 @@ module Elrpc
106
106
  @client = Elrpc.start_client(@port)
107
107
  return self
108
108
  end
109
+
110
+ def alive?
111
+ @client.alive?
112
+ end
109
113
 
110
114
  def register_method(method)
111
115
  @client.register_method(method)
@@ -317,6 +321,10 @@ module Elrpc
317
321
  @logger.debug ":ready for I/O stream."
318
322
  end
319
323
 
324
+ def alive?
325
+ return @socket_state == :socket_opened
326
+ end
327
+
320
328
  # 自分にメソッドを登録する
321
329
  def register_method(method)
322
330
  @methods[method.name] = method
@@ -330,6 +338,7 @@ module Elrpc
330
338
  # 相手のメソッドを呼ぶ
331
339
  # block(err, value)
332
340
  def call_method_async(name, *args, &block)
341
+ return _raise_connection_error(block) if @socket_state != :socket_opened
333
342
  uid = Elrpc.gen_uid
334
343
  msg = CallMessage.new(uid, name, args, block)
335
344
  # ここは競合しないのでロックしない
@@ -338,6 +347,13 @@ module Elrpc
338
347
  uid
339
348
  end
340
349
 
350
+ def _raise_connection_error(block)
351
+ job = lambda do
352
+ block.call(EPCStackError.new("ConnectionClosed","Connection closed",""))
353
+ end
354
+ @worker_pool.invoke(job)
355
+ end
356
+
341
357
  # 相手のメソッドを呼ぶ(同期版)
342
358
  def call_method(name, *args)
343
359
  mutex = Mutex.new
@@ -363,6 +379,7 @@ module Elrpc
363
379
  # 接続相手のメソッド一覧を返す
364
380
  # [[name, argdoc, docstring], ...]
365
381
  def query_methods_async(&block)
382
+ return _raise_connection_error(block) if @socket_state != :socket_opened
366
383
  uid = Elrpc.gen_uid
367
384
  msg = MethodsMessage.new(uid, block)
368
385
  @session[uid] = msg
@@ -403,7 +420,7 @@ module Elrpc
403
420
  @sender_thread.join(4) unless Thread.current == @sender_thread
404
421
  @receiver_thread.join(4) unless Thread.current == @receiver_thread
405
422
  _clear_waiting_sessions
406
- @socket_state = :scoket_not_connected
423
+ @socket_state = :socket_not_connected
407
424
  end
408
425
  _wakeup
409
426
  @logger.debug "RPCService.stop: completed"
@@ -430,7 +447,7 @@ module Elrpc
430
447
  def _clear_waiting_sessions
431
448
  @session_lock.synchronize do
432
449
  @session.keys.each do |uid|
433
- _session_return(uid, "EPC Connection closed", nil)
450
+ _session_return(uid, EPCStackError.new("ConnectionClosed","EPC Connection closed",""), nil)
434
451
  end
435
452
  end
436
453
  end
@@ -520,6 +537,7 @@ module Elrpc
520
537
  lenstr = @socket.read(6)
521
538
  if lenstr.nil? then
522
539
  @logger.debug "[rcvloop] Socket closed!"
540
+ @socket_state = :socket_not_connected
523
541
  break
524
542
  end
525
543
  len = lenstr.to_i(16)
@@ -527,6 +545,7 @@ module Elrpc
527
545
  body = @socket.read(len) # 1 means LF
528
546
  if body.nil? then
529
547
  @logger.debug "[rcvloop] Socket closed!"
548
+ @socket_state = :socket_not_connected
530
549
  break
531
550
  end
532
551
  body.force_encoding("utf-8")
@@ -584,6 +603,7 @@ module Elrpc
584
603
  uid = nil
585
604
  end # loop
586
605
  @logger.debug "[receiver-thread] loop exit : #{@socket_state}"
606
+ _clear_waiting_sessions
587
607
  _wakeup
588
608
  @logger.debug "[receiver-thread exit]--------------"
589
609
  end
data/lib/elrpc/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Elrpc
2
- VERSION = "0.0.6"
2
+ VERSION = "0.0.7"
3
3
  end
data/test/_errors.rb CHANGED
@@ -12,4 +12,7 @@ end
12
12
  server.def_method "echo" do |*arg|
13
13
  arg
14
14
  end
15
+ server.def_method "killme" do |*arg|
16
+ exit
17
+ end
15
18
  server.wait
data/test/test-epc.rb CHANGED
@@ -55,6 +55,7 @@ class TestEPC < Test::Unit::TestCase
55
55
  thread = Thread.start { loop { puts io.readline } }
56
56
  client = Elrpc.start_client(port)
57
57
  client.logger.level = Logger::ERROR
58
+ #client.logger.level = Logger::DEBUG
58
59
  begin
59
60
  yield client
60
61
  rescue => e
@@ -118,7 +119,7 @@ class TestEPC < Test::Unit::TestCase
118
119
  end
119
120
  end
120
121
  end
121
-
122
+
122
123
  sub_test_case "04 Errors" do
123
124
 
124
125
  test "Error sync" do
@@ -126,7 +127,7 @@ class TestEPC < Test::Unit::TestCase
126
127
  assert_raise_message /divided by 0/ do
127
128
  ret = client.call_method("num_error")
128
129
  end
129
- assert_raise_message /Raise!/ do
130
+ assert_raise_message /Raise/ do
130
131
  ret = client.call_method("raise_error")
131
132
  end
132
133
  ret = client.call_method("echo", "recover!!")
@@ -160,6 +161,18 @@ class TestEPC < Test::Unit::TestCase
160
161
  end
161
162
  end
162
163
 
164
+ test "EPC Down" do
165
+ with_epc "_errors.rb" do |client|
166
+ assert_raise_kind_of Elrpc::EPCStackError do
167
+ client.call_method("killme")
168
+ end
169
+ assert_raise_kind_of Elrpc::EPCStackError do
170
+ client.call_method("echo", "die?" )
171
+ end
172
+ assert_equal false, client.alive?
173
+ end
174
+ end
175
+
163
176
  end
164
177
 
165
178
  sub_test_case "05 Query" do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: elrpc
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - SAKURAI Masashi
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-02-26 00:00:00.000000000 Z
11
+ date: 2016-04-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: elparser