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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d1bd654109dcee1eaf2deb278fe4711f83e26108
4
- data.tar.gz: 62a3c061bb49aa28e0a16dbd3890c7db6afde2f7
3
+ metadata.gz: 0601ce492ad0b35c6e5bc8262c63a67eb6383b07
4
+ data.tar.gz: 908b2970b3d03f79cff8e8f6beb4357d99323281
5
5
  SHA512:
6
- metadata.gz: 251cd8a93db0ffa7ccf06351e7565e6668d88bab47165fb4f796bd8ce48c779ff53d6de73f3bed7f4e8da397c7531afb0e1b637dba36163afee7e05401e87c7a
7
- data.tar.gz: 6ba3f86460c17470cec02ef40920a7e19c2ae45909672459e26b966c724c77ff50e4cc04587a6401cc3a690e155f86a3b8489a25ee5da0db6854fc3e41d84798
6
+ metadata.gz: f495301ebe6c183247ea8922344dcc740cdda21139e48dd7d4057828a55350198f3a0cef15d4e8ebb61c54058954c2800f133ea79ff05e7826bd3bb4990858bb
7
+ data.tar.gz: c0f97fa987663df406114e7e2acff07997d09ab546b136e7abf835233657fce3c3092315a9997ac4f1b2ea6dfd904f122dd7179194c7dd87c6dec0c2c38cf528
@@ -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
@@ -9,7 +9,7 @@ module HPFeeds
9
9
  OP_SUBSCRIBE = 4
10
10
 
11
11
  HEADERSIZE = 5
12
- BUFSIZE = 16384
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
- @logger = Logger.new(log_to)
30
- @logger.level = get_log_level(options[:log_level])
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 = Decoder.new
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
- @logger.info("subscribing to #{c}")
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
- @logger.info("publish to #{c}: #{data}")
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 = @socket.recv(len)
128
- @logger.debug("received #{data.length} bytes of data")
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.info("received #{payload.length} bytes of data from #{name} on channel #{chan}")
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 recv_timeout(len=BUFSIZE)
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
- return Logger::INFO if level.nil?
169
- case level.to_s.downcase
170
- when 'debug'; Logger::DEBUG
171
- when 'info'; Logger::INFO
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
 
@@ -1,3 +1,3 @@
1
1
  module HPFeeds
2
- VERSION = "0.1.2"
2
+ VERSION = "0.1.3"
3
3
  end
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.2
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-16 00:00:00.000000000 Z
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
@@ -1,3 +0,0 @@
1
- module HPFeeds
2
- VERSION = "0.1.3"
3
- end