slanger 0.3.6 → 0.3.8

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of slanger might be problematic. Click here for more details.

@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 1cdac724fa34f41e7c02b5121fd89806f87b3a28
4
+ data.tar.gz: 3940aaaa1d1865a98c0f3803f843f57516e4ab00
5
+ SHA512:
6
+ metadata.gz: 06c0623e550da0a20fc2ac7012042a0dfeb43728e9defca7be8cea88cc05fb5cbf9f88faded888ad877697814259f225336b57bee67eb4d8472b9d12c4653d37
7
+ data.tar.gz: 69c8d743b15232dae35612707d61cd3040d5d7958896d1b3e5df8de9dc93ceec45ebf29f47a9abe03f6902c67554b0e7a812c803c401a90195f780bcc53bb2b5
data/README.md CHANGED
@@ -1,22 +1,41 @@
1
1
  # Slanger
2
- ##Typical usage
3
-
4
- Slanger is a standalone server ruby implementation of the Pusher protocol. It
5
- is not designed to run inside a Rails or sinatra app, but it can be easily
6
- installed as a gem.
7
2
 
3
+ Don't do this
4
+ ==============
8
5
  ```
9
- #see the section further down for How To Use It
10
- gem install slanger
6
+ gem 'slanger'
11
7
  ```
12
8
 
13
- ##You probably don't mean this:
9
+ Do this:
10
+ --------
14
11
 
15
- Gemfile
16
12
  ```
17
- gem 'slanger'
13
+ gem install slanger
14
+ redis-server &> /dev/null &
15
+
16
+ slanger --app_key 765ec374ae0a69f4ce44 --secret your-pusher-secret
18
17
  ```
19
18
 
19
+ If you submit a pull request, please don't be these people:
20
+ [#109](https://github.com/stevegraham/slanger/pull/109)
21
+ [#108](https://github.com/stevegraham/slanger/pull/108)
22
+ [#83](https://github.com/stevegraham/slanger/pull/83)
23
+ [#81](https://github.com/stevegraham/slanger/pull/81)
24
+ [#72](https://github.com/stevegraham/slanger/pull/72)
25
+ [#4](https://github.com/stevegraham/slanger/pull/4)
26
+
27
+ I'll try to politely close any new ones but basically,
28
+
29
+ Slanger is intended as a server that is easy to install, not a gem inside Rails or Sinatra.
30
+
31
+ ##Typical usage
32
+
33
+ Slanger is a standalone server ruby implementation of the Pusher protocol. It
34
+ is not designed to run inside a Rails or sinatra app, but it can be easily
35
+ installed as a gem.
36
+
37
+ Bundler has multiple purposes, one of which is useful for installation.
38
+
20
39
  ##About
21
40
  Slanger is an open source server implementation of the Pusher protocol written
22
41
  in Ruby. It is designed to scale horizontally across N nodes and to be agnostic
@@ -138,7 +157,7 @@ Slanger supports several configuration options, which can be supplied as command
138
157
 
139
158
  -b or --webhook_url URL for webhooks. This argument is optional, if given webhook callbacks will be made http://pusher.com/docs/webhooks
140
159
 
141
- -c or --cert_chain_file Certificate chain file or the Certificate file for SSL support. This argument is optional, if given, SSL will be enabled
160
+ -c or --cert_file Certificate file for SSL support. This argument is optional, if given, SSL will be enabled
142
161
 
143
162
  -v or --[no-]verbose This makes Slanger run verbosely, meaning WebSocket frames will be echoed to STDOUT. Useful for debugging
144
163
  </pre>
@@ -178,3 +197,4 @@ Pusher is an awesome service, very reasonably priced, and run by an awesome crew
178
197
  &copy; 2011 a Stevie Graham joint.
179
198
 
180
199
 
200
+
@@ -50,7 +50,7 @@ OptionParser.new do |opts|
50
50
  options[:webhook_url] = p
51
51
  end
52
52
 
53
- opts.on '-c', '--cert_chain_file FILE', "Certificate chain file for SSL transport" do |p|
53
+ opts.on '-c', '--cert_file FILE', "Certificate file for SSL transport" do |p|
54
54
  options[:tls_options] ||= {}
55
55
  options[:tls_options][:cert_chain_file] = p
56
56
  end
@@ -59,6 +59,10 @@ OptionParser.new do |opts|
59
59
  options[:debug] = v
60
60
  end
61
61
 
62
+ opts.on "-t" "--activity_timeout", "Activity (ping-pong) Timeout" do |t|
63
+ options[:activity_timeout] = t
64
+ end
65
+
62
66
  opts.parse!
63
67
 
64
68
  %w<app_key secret>.each do |parameter|
@@ -76,7 +80,7 @@ end
76
80
  if options[:tls_options]
77
81
  [:cert_chain_file, :private_key_file].each do |param|
78
82
  raise RuntimeError.new "--#{param} does not exist at `#{options[:tls_options][param]}`" unless File.exists? options[:tls_options][param]
79
- raise RuntimeError.new "Both --cert_chain_file and --private_key_file need to be specified" unless options[:tls_options][param]
83
+ raise RuntimeError.new "Both --cert_file and --private_key_file need to be specified" unless options[:tls_options][param]
80
84
  end
81
85
  end
82
86
 
@@ -14,7 +14,7 @@ module Slanger
14
14
  @options ||= {
15
15
  api_host: '0.0.0.0', api_port: '4567', websocket_host: '0.0.0.0',
16
16
  websocket_port: '8080', debug: false, redis_address: 'redis://0.0.0.0:6379/0',
17
- socket_handler: Slanger::Handler, require: []
17
+ socket_handler: Slanger::Handler, require: [], activity_timeout: 120
18
18
  }
19
19
  end
20
20
 
@@ -22,7 +22,10 @@ module Slanger
22
22
 
23
23
  def establish
24
24
  @socket_id = SecureRandom.uuid
25
- send_payload nil, 'pusher:connection_established', { socket_id: @socket_id }
25
+ send_payload nil, 'pusher:connection_established', {
26
+ socket_id: @socket_id,
27
+ activity_timeout: Slanger::Config.activity_timeout
28
+ }
26
29
  end
27
30
 
28
31
  private
@@ -12,8 +12,9 @@ module Slanger
12
12
  attr_accessor :connection
13
13
  delegate :error, :send_payload, to: :connection
14
14
 
15
- def initialize(socket)
15
+ def initialize(socket, handshake)
16
16
  @socket = socket
17
+ @handshake = handshake
17
18
  @connection = Connection.new(@socket)
18
19
  @subscriptions = {}
19
20
  authenticate
@@ -53,7 +54,7 @@ module Slanger
53
54
  end
54
55
 
55
56
  def pusher_ping(msg)
56
- send_payload nil, 'pusher:ping'
57
+ send_payload nil, 'pusher:pong'
57
58
  end
58
59
 
59
60
  def pusher_pong msg; end
@@ -79,7 +80,7 @@ module Slanger
79
80
  private
80
81
 
81
82
  def app_key
82
- @socket.request['path'].split(/\W/)[2]
83
+ @handshake.path.split(/\W/)[2]
83
84
  end
84
85
 
85
86
  def valid_app_key? app_key
@@ -8,7 +8,7 @@ module Slanger
8
8
  extend Forwardable
9
9
 
10
10
  def_delegator :publisher, :publish
11
- def_delegators :subscriber, :on, :subscribe
11
+ def_delegators :subscriber, :subscribe
12
12
  def_delegators :regular_connection, :hgetall, :hdel, :hset, :hincrby
13
13
 
14
14
  private
@@ -22,7 +22,13 @@ module Slanger
22
22
  end
23
23
 
24
24
  def subscriber
25
- @subscriber ||= new_connection
25
+ @subscriber ||= new_connection.pubsub.tap do |c|
26
+ c.on(:message) do |channel, message|
27
+ message = JSON.parse message
28
+ c = Channel.from message['channel']
29
+ c.dispatch message, channel
30
+ end
31
+ end
26
32
  end
27
33
 
28
34
  def new_connection
@@ -30,12 +36,5 @@ module Slanger
30
36
  end
31
37
 
32
38
  extend self
33
-
34
- # Dispatch messages received from Redis to their destination channel.
35
- on(:message) do |channel, message|
36
- message = JSON.parse message
37
- c = Channel.from message['channel']
38
- c.dispatch message, channel
39
- end
40
39
  end
41
40
  end
@@ -1,3 +1,3 @@
1
1
  module Slanger
2
- VERSION = '0.3.6'
2
+ VERSION = '0.3.8'
3
3
  end
@@ -24,7 +24,7 @@ module Slanger
24
24
  # Keep track of handler instance in instance of EM::Connection to ensure a unique handler instance is used per connection.
25
25
  ws.class_eval { attr_accessor :connection_handler }
26
26
  # Delegate connection management to handler instance.
27
- ws.onopen { ws.connection_handler = Slanger::Config.socket_handler.new ws }
27
+ ws.onopen { |handshake| ws.connection_handler = Slanger::Config.socket_handler.new ws, handshake }
28
28
  ws.onmessage { |msg| ws.connection_handler.onmessage msg }
29
29
  ws.onclose { ws.connection_handler.onclose }
30
30
  end
@@ -13,15 +13,9 @@ module Slanger
13
13
  digest = OpenSSL::Digest::SHA256.new
14
14
  hmac = OpenSSL::HMAC.hexdigest(digest, Slanger::Config.secret, payload)
15
15
 
16
- Fiber.new do
17
- f = Fiber.current
18
-
19
- EM::HttpRequest.new(Slanger::Config.webhook_url).
20
- post(body: payload, head: { "X-Pusher-Key" => Slanger::Config.app_key, "X-Pusher-Secret" => hmac }).
21
- callback { f.resume }
22
- # TODO: Exponentially backed off retries for errors
23
- Fiber.yield
24
- end.resume
16
+ EM::HttpRequest.new(Slanger::Config.webhook_url).
17
+ post(body: payload, head: { "X-Pusher-Key" => Slanger::Config.app_key, "X-Pusher-Secret" => hmac })
18
+ # TODO: Exponentially backed off retries for errors
25
19
  end
26
20
 
27
21
  extend self
data/slanger.rb CHANGED
@@ -5,6 +5,7 @@ require 'eventmachine'
5
5
  require 'em-hiredis'
6
6
  require 'rack'
7
7
  require 'active_support/core_ext/string'
8
+ require File.join(File.dirname(__FILE__), 'lib', 'slanger', 'version')
8
9
 
9
10
  module Slanger; end
10
11
 
metadata CHANGED
@@ -1,100 +1,88 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: slanger
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.6
5
- prerelease:
4
+ version: 0.3.8
6
5
  platform: ruby
7
6
  authors:
8
7
  - Stevie Graham
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-02-08 00:00:00.000000000 Z
11
+ date: 2014-03-20 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: eventmachine
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
17
  - - ~>
20
18
  - !ruby/object:Gem::Version
21
- version: 0.12.10
19
+ version: 1.0.0
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
24
  - - ~>
28
25
  - !ruby/object:Gem::Version
29
- version: 0.12.10
26
+ version: 1.0.0
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: em-hiredis
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
31
  - - ~>
36
32
  - !ruby/object:Gem::Version
37
- version: 0.1.0
33
+ version: 0.2.0
38
34
  type: :runtime
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
38
  - - ~>
44
39
  - !ruby/object:Gem::Version
45
- version: 0.1.0
40
+ version: 0.2.0
46
41
  - !ruby/object:Gem::Dependency
47
42
  name: em-websocket
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
45
  - - ~>
52
46
  - !ruby/object:Gem::Version
53
- version: 0.3.5
47
+ version: 0.5.0
54
48
  type: :runtime
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
52
  - - ~>
60
53
  - !ruby/object:Gem::Version
61
- version: 0.3.5
54
+ version: 0.5.0
62
55
  - !ruby/object:Gem::Dependency
63
56
  name: rack
64
57
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
58
  requirements:
67
59
  - - ~>
68
60
  - !ruby/object:Gem::Version
69
- version: '1.3'
61
+ version: 1.4.5
70
62
  type: :runtime
71
63
  prerelease: false
72
64
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
65
  requirements:
75
66
  - - ~>
76
67
  - !ruby/object:Gem::Version
77
- version: '1.3'
68
+ version: 1.4.5
78
69
  - !ruby/object:Gem::Dependency
79
70
  name: rack-fiber_pool
80
71
  requirement: !ruby/object:Gem::Requirement
81
- none: false
82
72
  requirements:
83
- - - '='
73
+ - - ~>
84
74
  - !ruby/object:Gem::Version
85
- version: 0.9.1
75
+ version: 0.9.2
86
76
  type: :runtime
87
77
  prerelease: false
88
78
  version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
79
  requirements:
91
- - - '='
80
+ - - ~>
92
81
  - !ruby/object:Gem::Version
93
- version: 0.9.1
82
+ version: 0.9.2
94
83
  - !ruby/object:Gem::Dependency
95
84
  name: signature
96
85
  requirement: !ruby/object:Gem::Requirement
97
- none: false
98
86
  requirements:
99
87
  - - ~>
100
88
  - !ruby/object:Gem::Version
@@ -102,7 +90,6 @@ dependencies:
102
90
  type: :runtime
103
91
  prerelease: false
104
92
  version_requirements: !ruby/object:Gem::Requirement
105
- none: false
106
93
  requirements:
107
94
  - - ~>
108
95
  - !ruby/object:Gem::Version
@@ -110,7 +97,6 @@ dependencies:
110
97
  - !ruby/object:Gem::Dependency
111
98
  name: activesupport
112
99
  requirement: !ruby/object:Gem::Requirement
113
- none: false
114
100
  requirements:
115
101
  - - ~>
116
102
  - !ruby/object:Gem::Version
@@ -118,7 +104,6 @@ dependencies:
118
104
  type: :runtime
119
105
  prerelease: false
120
106
  version_requirements: !ruby/object:Gem::Requirement
121
- none: false
122
107
  requirements:
123
108
  - - ~>
124
109
  - !ruby/object:Gem::Version
@@ -126,7 +111,6 @@ dependencies:
126
111
  - !ruby/object:Gem::Dependency
127
112
  name: glamazon
128
113
  requirement: !ruby/object:Gem::Requirement
129
- none: false
130
114
  requirements:
131
115
  - - ~>
132
116
  - !ruby/object:Gem::Version
@@ -134,7 +118,6 @@ dependencies:
134
118
  type: :runtime
135
119
  prerelease: false
136
120
  version_requirements: !ruby/object:Gem::Requirement
137
- none: false
138
121
  requirements:
139
122
  - - ~>
140
123
  - !ruby/object:Gem::Version
@@ -142,7 +125,6 @@ dependencies:
142
125
  - !ruby/object:Gem::Dependency
143
126
  name: sinatra
144
127
  requirement: !ruby/object:Gem::Requirement
145
- none: false
146
128
  requirements:
147
129
  - - ~>
148
130
  - !ruby/object:Gem::Version
@@ -150,7 +132,6 @@ dependencies:
150
132
  type: :runtime
151
133
  prerelease: false
152
134
  version_requirements: !ruby/object:Gem::Requirement
153
- none: false
154
135
  requirements:
155
136
  - - ~>
156
137
  - !ruby/object:Gem::Version
@@ -158,23 +139,20 @@ dependencies:
158
139
  - !ruby/object:Gem::Dependency
159
140
  name: thin
160
141
  requirement: !ruby/object:Gem::Requirement
161
- none: false
162
142
  requirements:
163
143
  - - ~>
164
144
  - !ruby/object:Gem::Version
165
- version: 1.2.11
145
+ version: 1.6.0
166
146
  type: :runtime
167
147
  prerelease: false
168
148
  version_requirements: !ruby/object:Gem::Requirement
169
- none: false
170
149
  requirements:
171
150
  - - ~>
172
151
  - !ruby/object:Gem::Version
173
- version: 1.2.11
152
+ version: 1.6.0
174
153
  - !ruby/object:Gem::Dependency
175
154
  name: em-http-request
176
155
  requirement: !ruby/object:Gem::Requirement
177
- none: false
178
156
  requirements:
179
157
  - - ~>
180
158
  - !ruby/object:Gem::Version
@@ -182,7 +160,6 @@ dependencies:
182
160
  type: :runtime
183
161
  prerelease: false
184
162
  version_requirements: !ruby/object:Gem::Requirement
185
- none: false
186
163
  requirements:
187
164
  - - ~>
188
165
  - !ruby/object:Gem::Version
@@ -190,39 +167,34 @@ dependencies:
190
167
  - !ruby/object:Gem::Dependency
191
168
  name: rspec
192
169
  requirement: !ruby/object:Gem::Requirement
193
- none: false
194
170
  requirements:
195
171
  - - ~>
196
172
  - !ruby/object:Gem::Version
197
- version: '2.6'
173
+ version: 2.12.0
198
174
  type: :development
199
175
  prerelease: false
200
176
  version_requirements: !ruby/object:Gem::Requirement
201
- none: false
202
177
  requirements:
203
178
  - - ~>
204
179
  - !ruby/object:Gem::Version
205
- version: '2.6'
180
+ version: 2.12.0
206
181
  - !ruby/object:Gem::Dependency
207
182
  name: pusher
208
183
  requirement: !ruby/object:Gem::Requirement
209
- none: false
210
184
  requirements:
211
185
  - - ~>
212
186
  - !ruby/object:Gem::Version
213
- version: 0.11.3
187
+ version: 0.12.0
214
188
  type: :development
215
189
  prerelease: false
216
190
  version_requirements: !ruby/object:Gem::Requirement
217
- none: false
218
191
  requirements:
219
192
  - - ~>
220
193
  - !ruby/object:Gem::Version
221
- version: 0.11.3
194
+ version: 0.12.0
222
195
  - !ruby/object:Gem::Dependency
223
196
  name: haml
224
197
  requirement: !ruby/object:Gem::Requirement
225
- none: false
226
198
  requirements:
227
199
  - - ~>
228
200
  - !ruby/object:Gem::Version
@@ -230,7 +202,6 @@ dependencies:
230
202
  type: :development
231
203
  prerelease: false
232
204
  version_requirements: !ruby/object:Gem::Requirement
233
- none: false
234
205
  requirements:
235
206
  - - ~>
236
207
  - !ruby/object:Gem::Version
@@ -238,23 +209,20 @@ dependencies:
238
209
  - !ruby/object:Gem::Dependency
239
210
  name: rake
240
211
  requirement: !ruby/object:Gem::Requirement
241
- none: false
242
212
  requirements:
243
- - - ! '>='
213
+ - - '>='
244
214
  - !ruby/object:Gem::Version
245
215
  version: '0'
246
216
  type: :development
247
217
  prerelease: false
248
218
  version_requirements: !ruby/object:Gem::Requirement
249
- none: false
250
219
  requirements:
251
- - - ! '>='
220
+ - - '>='
252
221
  - !ruby/object:Gem::Version
253
222
  version: '0'
254
223
  - !ruby/object:Gem::Dependency
255
224
  name: timecop
256
225
  requirement: !ruby/object:Gem::Requirement
257
- none: false
258
226
  requirements:
259
227
  - - ~>
260
228
  - !ruby/object:Gem::Version
@@ -262,7 +230,6 @@ dependencies:
262
230
  type: :development
263
231
  prerelease: false
264
232
  version_requirements: !ruby/object:Gem::Requirement
265
- none: false
266
233
  requirements:
267
234
  - - ~>
268
235
  - !ruby/object:Gem::Version
@@ -270,7 +237,6 @@ dependencies:
270
237
  - !ruby/object:Gem::Dependency
271
238
  name: webmock
272
239
  requirement: !ruby/object:Gem::Requirement
273
- none: false
274
240
  requirements:
275
241
  - - ~>
276
242
  - !ruby/object:Gem::Version
@@ -278,7 +244,6 @@ dependencies:
278
244
  type: :development
279
245
  prerelease: false
280
246
  version_requirements: !ruby/object:Gem::Requirement
281
- none: false
282
247
  requirements:
283
248
  - - ~>
284
249
  - !ruby/object:Gem::Version
@@ -286,19 +251,17 @@ dependencies:
286
251
  - !ruby/object:Gem::Dependency
287
252
  name: mocha
288
253
  requirement: !ruby/object:Gem::Requirement
289
- none: false
290
254
  requirements:
291
255
  - - ~>
292
256
  - !ruby/object:Gem::Version
293
- version: 0.12.0
257
+ version: 0.13.2
294
258
  type: :development
295
259
  prerelease: false
296
260
  version_requirements: !ruby/object:Gem::Requirement
297
- none: false
298
261
  requirements:
299
262
  - - ~>
300
263
  - !ruby/object:Gem::Version
301
- version: 0.12.0
264
+ version: 0.13.2
302
265
  description: A websocket service compatible with Pusher libraries
303
266
  email: sjtgraham@mac.com
304
267
  executables:
@@ -326,26 +289,26 @@ files:
326
289
  - bin/slanger
327
290
  homepage: http://github.com/stevegraham/slanger
328
291
  licenses: []
292
+ metadata: {}
329
293
  post_install_message:
330
294
  rdoc_options: []
331
295
  require_paths:
332
296
  - .
333
297
  required_ruby_version: !ruby/object:Gem::Requirement
334
- none: false
335
298
  requirements:
336
- - - ! '>='
299
+ - - '>='
337
300
  - !ruby/object:Gem::Version
338
301
  version: 1.9.2
339
302
  required_rubygems_version: !ruby/object:Gem::Requirement
340
- none: false
341
303
  requirements:
342
- - - ! '>='
304
+ - - '>='
343
305
  - !ruby/object:Gem::Version
344
306
  version: '0'
345
307
  requirements: []
346
308
  rubyforge_project:
347
- rubygems_version: 1.8.24
309
+ rubygems_version: 2.0.3
348
310
  signing_key:
349
- specification_version: 3
311
+ specification_version: 4
350
312
  summary: A websocket service compatible with Pusher libraries
351
313
  test_files: []
314
+ has_rdoc: