hpfeeds 0.1.2 → 0.1.3
Sign up to get free protection for your applications and to get access to all the features.
- 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