hpfeeds 0.1.2 → 0.1.3
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 +4 -4
- data/CHANGELOG.md +9 -0
- data/lib/hpfeeds/client.rb +41 -26
- data/lib/hpfeeds/version.rb +1 -1
- metadata +2 -3
- data/lib/hpfeeds/version.rb~ +0 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0601ce492ad0b35c6e5bc8262c63a67eb6383b07
|
4
|
+
data.tar.gz: 908b2970b3d03f79cff8e8f6beb4357d99323281
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f495301ebe6c183247ea8922344dcc740cdda21139e48dd7d4057828a55350198f3a0cef15d4e8ebb61c54058954c2800f133ea79ff05e7826bd3bb4990858bb
|
7
|
+
data.tar.gz: c0f97fa987663df406114e7e2acff07997d09ab546b136e7abf835233657fce3c3092315a9997ac4f1b2ea6dfd904f122dd7179194c7dd87c6dec0c2c38cf528
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,12 @@
|
|
1
|
+
#### 0.1.3
|
2
|
+
- major changes:
|
3
|
+
- fixed bug in large feeds receiving
|
4
|
+
- added automatic subscription on reconnection
|
5
|
+
- fixed debug messages
|
6
|
+
|
7
|
+
- minor changes:
|
8
|
+
- housekeeping
|
9
|
+
|
1
10
|
#### 0.1.2
|
2
11
|
- major changes:
|
3
12
|
- added log_to and log_level options to HPFeeds::Client constructor
|
data/lib/hpfeeds/client.rb
CHANGED
@@ -9,7 +9,7 @@ module HPFeeds
|
|
9
9
|
OP_SUBSCRIBE = 4
|
10
10
|
|
11
11
|
HEADERSIZE = 5
|
12
|
-
|
12
|
+
BLOCKSIZE = 1024
|
13
13
|
|
14
14
|
class Client
|
15
15
|
def initialize(options)
|
@@ -26,11 +26,13 @@ module HPFeeds
|
|
26
26
|
@stopped = false
|
27
27
|
|
28
28
|
log_to = options[:log_to] || STDOUT
|
29
|
-
|
30
|
-
@logger
|
29
|
+
log_level = options[:log_level] || :info
|
30
|
+
@logger = Logger.new(log_to)
|
31
|
+
@logger.level = get_log_level(log_level)
|
31
32
|
|
32
|
-
@decoder
|
33
|
-
@handlers
|
33
|
+
@decoder = Decoder.new
|
34
|
+
@handlers = {}
|
35
|
+
@subscribed = []
|
34
36
|
|
35
37
|
tryconnect
|
36
38
|
end
|
@@ -39,6 +41,9 @@ module HPFeeds
|
|
39
41
|
loop do
|
40
42
|
begin
|
41
43
|
connect()
|
44
|
+
for c in @subscribed
|
45
|
+
subscribe_to_channel c
|
46
|
+
end
|
42
47
|
break
|
43
48
|
rescue => e
|
44
49
|
@logger.warn("#{e.class} caugthed while connecting: #{e}. Reconnecting in #{@sleepwait} seconds...")
|
@@ -63,9 +68,9 @@ module HPFeeds
|
|
63
68
|
|
64
69
|
if opcode == OP_INFO
|
65
70
|
data = recv_timeout(len)
|
66
|
-
@logger.debug("received data = #{data}")
|
71
|
+
@logger.debug("received data = #{binary_to_hex(data)}")
|
67
72
|
name, rand = @decoder.parse_info(data)
|
68
|
-
@logger.debug("received INFO, name = #{name}, rand = #{rand}")
|
73
|
+
@logger.debug("received INFO, name = #{name}, rand = #{binary_to_hex(rand)}")
|
69
74
|
@brokername = name
|
70
75
|
auth = @decoder.msg_auth(rand, @ident, @secret)
|
71
76
|
@socket.send(auth, 0)
|
@@ -85,18 +90,15 @@ module HPFeeds
|
|
85
90
|
raise ArgumentError.new('When subscribing to a channel, you have to provide a block as a callback for message handling')
|
86
91
|
end
|
87
92
|
for c in channels
|
88
|
-
|
89
|
-
message = @decoder.msg_subscribe(@ident, c)
|
90
|
-
@socket.send(message, 0)
|
93
|
+
subscribe_to_channel c
|
91
94
|
@handlers[c] = handler unless handler.nil?
|
95
|
+
@subscribed << c
|
92
96
|
end
|
93
97
|
end
|
94
98
|
|
95
99
|
def publish(data, *channels)
|
96
100
|
for c in channels
|
97
|
-
|
98
|
-
message = @decoder.msg_publish(@ident, c, data)
|
99
|
-
@socket.send(message, 0)
|
101
|
+
publish_to_channel c, data
|
100
102
|
end
|
101
103
|
end
|
102
104
|
|
@@ -124,8 +126,10 @@ module HPFeeds
|
|
124
126
|
end
|
125
127
|
opcode, len = @decoder.parse_header(header)
|
126
128
|
@logger.debug("received header, opcode = #{opcode}, len = #{len}")
|
127
|
-
data =
|
128
|
-
|
129
|
+
data = ''
|
130
|
+
while data.size < len - HEADERSIZE
|
131
|
+
data += @socket.recv(BLOCKSIZE)
|
132
|
+
end
|
129
133
|
if opcode == OP_ERROR
|
130
134
|
unless error_callback.nil?
|
131
135
|
error_callback.call(data)
|
@@ -134,7 +138,7 @@ module HPFeeds
|
|
134
138
|
end
|
135
139
|
elsif opcode == OP_PUBLISH
|
136
140
|
name, chan, payload = @decoder.parse_publish(data)
|
137
|
-
@logger.
|
141
|
+
@logger.debug("received #{payload.length} bytes of data from #{name} on channel #{chan}")
|
138
142
|
handler = @handlers[chan]
|
139
143
|
unless handler.nil?
|
140
144
|
# ignore unhandled messages
|
@@ -156,7 +160,23 @@ module HPFeeds
|
|
156
160
|
end
|
157
161
|
|
158
162
|
private
|
159
|
-
def
|
163
|
+
def binary_to_hex s
|
164
|
+
"0x#{s.unpack('H*')[0]}" rescue ''
|
165
|
+
end
|
166
|
+
|
167
|
+
def subscribe_to_channel c
|
168
|
+
@logger.info("subscribing to #{c}")
|
169
|
+
message = @decoder.msg_subscribe(@ident, c)
|
170
|
+
@socket.send(message, 0)
|
171
|
+
end
|
172
|
+
|
173
|
+
def publish_to_channel c, data
|
174
|
+
@logger.info("publish to #{c}: #{data}")
|
175
|
+
message = @decoder.msg_publish(@ident, c, data)
|
176
|
+
@socket.send(message, 0)
|
177
|
+
end
|
178
|
+
|
179
|
+
def recv_timeout(len)
|
160
180
|
if IO.select([@socket], nil, nil, @timeout)
|
161
181
|
@socket.recv(len)
|
162
182
|
else
|
@@ -165,15 +185,10 @@ module HPFeeds
|
|
165
185
|
end
|
166
186
|
|
167
187
|
def get_log_level(level)
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
when 'warn'; Logger::WARN
|
173
|
-
when 'warning'; Logger::WARN
|
174
|
-
when 'error'; Logger::ERROR
|
175
|
-
when 'fatal'; Logger::FATAL
|
176
|
-
else Logger::INFO
|
188
|
+
begin
|
189
|
+
Logger.const_get(level.to_s.upcase)
|
190
|
+
rescue
|
191
|
+
raise ArgumentError.new("Unknown log level #{level}")
|
177
192
|
end
|
178
193
|
end
|
179
194
|
|
data/lib/hpfeeds/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hpfeeds
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Francesco Coda Zabetta
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-04-
|
11
|
+
date: 2013-04-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -46,7 +46,6 @@ extensions: []
|
|
46
46
|
extra_rdoc_files: []
|
47
47
|
files:
|
48
48
|
- lib/hpfeeds/exception.rb
|
49
|
-
- lib/hpfeeds/version.rb~
|
50
49
|
- lib/hpfeeds/decoder.rb
|
51
50
|
- lib/hpfeeds/client.rb
|
52
51
|
- lib/hpfeeds/version.rb
|
data/lib/hpfeeds/version.rb~
DELETED