em-jack 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/lib/em-jack.rb +1 -1
- data/lib/em-jack/connection.rb +43 -6
- metadata +11 -4
data/lib/em-jack.rb
CHANGED
data/lib/em-jack/connection.rb
CHANGED
@@ -25,13 +25,11 @@ module EMJack
|
|
25
25
|
@port = opts[:port] || 11300
|
26
26
|
@tube = opts[:tube]
|
27
27
|
|
28
|
-
|
29
|
-
@watched_tubes = ['default']
|
28
|
+
reset_tube_state
|
30
29
|
|
31
30
|
@data = ""
|
32
31
|
@retries = 0
|
33
32
|
@in_reserve = false
|
34
|
-
@deferrables = []
|
35
33
|
|
36
34
|
@conn = EM::connect(host, port, EMJack::BeanstalkConnection) do |conn|
|
37
35
|
conn.client = self
|
@@ -43,6 +41,17 @@ module EMJack
|
|
43
41
|
end
|
44
42
|
end
|
45
43
|
|
44
|
+
def reset_tube_state
|
45
|
+
prev_used = @used_tube
|
46
|
+
prev_watched = @watched_tubes.dup if @watched_tubes
|
47
|
+
|
48
|
+
@used_tube = 'default'
|
49
|
+
@watched_tubes = ['default']
|
50
|
+
@deferrables = []
|
51
|
+
|
52
|
+
return [prev_used, prev_watched]
|
53
|
+
end
|
54
|
+
|
46
55
|
def fiber!
|
47
56
|
eigen = (class << self
|
48
57
|
self
|
@@ -230,15 +239,39 @@ module EMJack
|
|
230
239
|
|
231
240
|
def disconnected
|
232
241
|
d = @deferrables.dup
|
233
|
-
|
242
|
+
|
243
|
+
prev_used, prev_watched = reset_tube_state
|
234
244
|
|
235
245
|
set_deferred_status(nil)
|
236
246
|
d.each { |df| df.fail(:disconnected) }
|
237
247
|
|
238
|
-
|
248
|
+
if @retries >= RETRY_COUNT
|
249
|
+
if @disconnected_callback
|
250
|
+
@disconnected_callback.call
|
251
|
+
else
|
252
|
+
raise EMJack::Disconnected
|
253
|
+
end
|
254
|
+
end
|
239
255
|
|
240
256
|
@retries += 1
|
241
|
-
EM.add_timer(5) {
|
257
|
+
EM.add_timer(5) { reconnect(prev_used, prev_watched) }
|
258
|
+
end
|
259
|
+
|
260
|
+
def reconnect(prev_used, prev_watched)
|
261
|
+
@conn.reconnect(@host, @port)
|
262
|
+
|
263
|
+
use(prev_used) if prev_used
|
264
|
+
[ prev_watched ].flatten.compact.each do |tube|
|
265
|
+
watch(tube)
|
266
|
+
end
|
267
|
+
end
|
268
|
+
|
269
|
+
def reconnect!
|
270
|
+
@retries = 0
|
271
|
+
|
272
|
+
prev_used, prev_watched = reset_tube_state
|
273
|
+
|
274
|
+
EM.next_tick { reconnect(prev_used, prev_watched) }
|
242
275
|
end
|
243
276
|
|
244
277
|
def add_deferrable(&blk)
|
@@ -256,6 +289,10 @@ module EMJack
|
|
256
289
|
def on_error(&blk)
|
257
290
|
@error_callback = blk
|
258
291
|
end
|
292
|
+
|
293
|
+
def on_disconnect(&blk)
|
294
|
+
@disconnected_callback = blk
|
295
|
+
end
|
259
296
|
|
260
297
|
def received(data)
|
261
298
|
@data << data
|
metadata
CHANGED
@@ -1,12 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: em-jack
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
+
hash: 31
|
4
5
|
prerelease: false
|
5
6
|
segments:
|
6
7
|
- 0
|
7
8
|
- 1
|
8
|
-
-
|
9
|
-
version: 0.1.
|
9
|
+
- 2
|
10
|
+
version: 0.1.2
|
10
11
|
platform: ruby
|
11
12
|
authors:
|
12
13
|
- dan sinclair
|
@@ -14,16 +15,18 @@ autorequire:
|
|
14
15
|
bindir: bin
|
15
16
|
cert_chain: []
|
16
17
|
|
17
|
-
date: 2010-
|
18
|
+
date: 2010-12-01 00:00:00 -05:00
|
18
19
|
default_executable:
|
19
20
|
dependencies:
|
20
21
|
- !ruby/object:Gem::Dependency
|
21
22
|
name: eventmachine
|
22
23
|
prerelease: false
|
23
24
|
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
24
26
|
requirements:
|
25
27
|
- - ">="
|
26
28
|
- !ruby/object:Gem::Version
|
29
|
+
hash: 3
|
27
30
|
segments:
|
28
31
|
- 0
|
29
32
|
version: "0"
|
@@ -72,23 +75,27 @@ rdoc_options:
|
|
72
75
|
require_paths:
|
73
76
|
- lib
|
74
77
|
required_ruby_version: !ruby/object:Gem::Requirement
|
78
|
+
none: false
|
75
79
|
requirements:
|
76
80
|
- - ">="
|
77
81
|
- !ruby/object:Gem::Version
|
82
|
+
hash: 3
|
78
83
|
segments:
|
79
84
|
- 0
|
80
85
|
version: "0"
|
81
86
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
87
|
+
none: false
|
82
88
|
requirements:
|
83
89
|
- - ">="
|
84
90
|
- !ruby/object:Gem::Version
|
91
|
+
hash: 3
|
85
92
|
segments:
|
86
93
|
- 0
|
87
94
|
version: "0"
|
88
95
|
requirements: []
|
89
96
|
|
90
97
|
rubyforge_project:
|
91
|
-
rubygems_version: 1.3.
|
98
|
+
rubygems_version: 1.3.7
|
92
99
|
signing_key:
|
93
100
|
specification_version: 3
|
94
101
|
summary: An evented Beanstalk client.
|