redisrpc 0.3.3 → 0.3.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (2) hide show
  1. data/lib/redisrpc.rb +20 -10
  2. metadata +5 -5
data/lib/redisrpc.rb CHANGED
@@ -24,6 +24,10 @@ module RedisRPC
24
24
  end
25
25
 
26
26
 
27
+ class TimeoutException<Exception
28
+ end
29
+
30
+
27
31
  class FunctionCall
28
32
 
29
33
  def initialize(args={})
@@ -45,22 +49,26 @@ module RedisRPC
45
49
 
46
50
  class Client
47
51
 
48
- def initialize(redis_server, input_queue)
52
+ def initialize(redis_server, message_queue, timeout=0)
49
53
  @redis_server = redis_server
50
- @input_queue = input_queue
54
+ @message_queue = message_queue
55
+ @timeout = timeout
51
56
  end
52
57
 
53
58
  def method_missing(sym, *args, &block)
54
59
  function_call = {'name' => sym.to_s, 'args' => args}
55
- response_queue = @input_queue + ':rpc:' + rand_string
60
+ response_queue = @message_queue + ':rpc:' + rand_string
56
61
  rpc_request = {'function_call' => function_call, 'response_queue' => response_queue}
57
62
  message = JSON.generate rpc_request
58
63
  if $DEBUG
59
64
  $stderr.puts 'RPC Request: ' + message
60
65
  end
61
- @redis_server.rpush @input_queue, message
62
- timeout_s = 0 # Block forever.
63
- message_queue, message = @redis_server.blpop response_queue, timeout_s
66
+ @redis_server.rpush @message_queue, message
67
+ result = @redis_server.blpop response_queue, @timeout
68
+ if result.nil?
69
+ raise TimeoutException
70
+ end
71
+ message_queue, message = result
64
72
  if $DEBUG
65
73
  if message_queue != response_queue
66
74
  fail 'assertion failed'
@@ -91,17 +99,19 @@ module RedisRPC
91
99
 
92
100
  class Server
93
101
 
94
- def initialize(redis_server, input_queue, local_object)
102
+ def initialize(redis_server, message_queue, local_object)
95
103
  @redis_server = redis_server
96
- @input_queue = input_queue
104
+ @message_queue = message_queue
97
105
  @local_object = local_object
98
106
  end
99
107
 
100
108
  def run
109
+ # Flush the message queue.
110
+ @redis_server.del @message_queue
101
111
  loop do
102
- message_queue, message = @redis_server.blpop @input_queue, 0
112
+ message_queue, message = @redis_server.blpop @message_queue, 0
103
113
  if $DEBUG
104
- fail 'assertion failed' if message_queue != @input_queue
114
+ fail 'assertion failed' if message_queue != @message_queue
105
115
  $stderr.puts 'RPC Request: ' + message
106
116
  end
107
117
  rpc_request = JSON.parse(message)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: redisrpc
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.3
4
+ version: 0.3.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-03-03 00:00:00.000000000 Z
12
+ date: 2012-04-04 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: redis
16
- requirement: &2151871000 !ruby/object:Gem::Requirement
16
+ requirement: &2151801000 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - <
@@ -21,7 +21,7 @@ dependencies:
21
21
  version: 3.0.0
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *2151871000
24
+ version_requirements: *2151801000
25
25
  description: ! 'RedisRPC is the easiest to use RPC library in the world. (No small
26
26
  claim!) It
27
27
 
@@ -43,7 +43,7 @@ description: ! 'RedisRPC is the easiest to use RPC library in the world. (No sma
43
43
 
44
44
  Many other RPC mechanisms are either programming language specific (e.g.
45
45
 
46
- JavaRMI or require boiler-plate code for explicit typing (e.g. Thrift).
46
+ Java RMI) or require boiler-plate code for explicit typing (e.g. Thrift).
47
47
 
48
48
  RedisRPC was designed to be extremely easy to use by eliminating boiler-plate
49
49