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 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