oceanex-slanger 0.7.1.4 → 0.7.3.0
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/README.md +4 -3
- data/lib/slanger/api/server.rb +4 -4
- data/lib/slanger/channel.rb +11 -8
- data/lib/slanger/config.rb +9 -3
- data/lib/slanger/connection.rb +1 -1
- data/lib/slanger/handler.rb +1 -1
- data/lib/slanger/lua/channel_attend.lua +9 -0
- data/lib/slanger/lua/channel_leave.lua +8 -0
- data/lib/slanger/presence_channel.rb +1 -1
- data/lib/slanger/redis.rb +8 -0
- data/lib/slanger/version.rb +1 -1
- data/lib/slanger/web_socket_server.rb +5 -1
- data/spec/integration/replaced_handler_spec.rb +1 -1
- metadata +33 -30
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c29aabb135c13b3f60f650980b9472e0c14658d64e54054727fef3c14939d886
|
4
|
+
data.tar.gz: 512bc1d00c219b385cacf852d023eca1f52aa6b18eded305729ac832399917db
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bcdd9a96fc8de94b85bf9f8b438146127b474464c8a5e6bb235c85e5c76af2b05bd6ffa5ab92ab16257afed4a065fdc3e47e74b486903ba2e7ca44f6c6887b3b
|
7
|
+
data.tar.gz: e3b06bcc9e8fd6540f058be92c91f9027b205dd227fdd87afd896d6bf0bc52cc4ae55fa6a0a416ce74ec499cd6e48b5f57f1fe3cfbb2db00a36c0263d482790f
|
data/README.md
CHANGED
@@ -18,7 +18,7 @@ OceanEx Slanger is a standalone server ruby implementation of the Pusher protoco
|
|
18
18
|
|
19
19
|
## Requirements
|
20
20
|
|
21
|
-
- Ruby
|
21
|
+
- Ruby 3.0.1 or greater
|
22
22
|
- Redis
|
23
23
|
|
24
24
|
## Server setup
|
@@ -218,8 +218,9 @@ OceanEx Slanger supports several configuration options, which can be supplied as
|
|
218
218
|
# Current Core Team and Contributor
|
219
219
|
- Joblee
|
220
220
|
- Steve
|
221
|
-
- Yao
|
222
221
|
- Meng
|
222
|
+
- Sniper
|
223
|
+
- Jiayu
|
223
224
|
|
224
225
|
|
225
|
-
©
|
226
|
+
© 2021 a OceanEx joint.
|
data/lib/slanger/api/server.rb
CHANGED
@@ -17,8 +17,8 @@ module Slanger
|
|
17
17
|
set :raise_errors, lambda { false }
|
18
18
|
set :show_exceptions, false
|
19
19
|
|
20
|
-
error(Signature::AuthenticationError) { |
|
21
|
-
error(Slanger::Api::InvalidRequest) { |
|
20
|
+
error(Signature::AuthenticationError) { |_| halt 401, "401 UNAUTHORIZED" }
|
21
|
+
error(Slanger::Api::InvalidRequest) { |_| halt 400, "400 Bad Request" }
|
22
22
|
|
23
23
|
before do
|
24
24
|
valid_request
|
@@ -32,7 +32,7 @@ module Slanger
|
|
32
32
|
EventPublisher.publish(valid_request.channels, event)
|
33
33
|
|
34
34
|
status 202
|
35
|
-
|
35
|
+
Oj.dump({}, mode: :compat)
|
36
36
|
end
|
37
37
|
|
38
38
|
post "/apps/:app_id/channels/:channel_id/events" do
|
@@ -42,7 +42,7 @@ module Slanger
|
|
42
42
|
EventPublisher.publish(valid_request.channels, event)
|
43
43
|
|
44
44
|
status 202
|
45
|
-
|
45
|
+
Oj.dump({}, mode: :compat)
|
46
46
|
end
|
47
47
|
|
48
48
|
def valid_request
|
data/lib/slanger/channel.rb
CHANGED
@@ -12,7 +12,8 @@ require "oj"
|
|
12
12
|
module Slanger
|
13
13
|
class Channel
|
14
14
|
extend Forwardable
|
15
|
-
|
15
|
+
CHANNEL_SUBSCRIBER_COUNT_KEY = "channel_subscriber_count"
|
16
|
+
CHANNEL_VACATED_DICT = "channel_vacated_dict"
|
16
17
|
def_delegators :channel, :push
|
17
18
|
attr_reader :channel_id
|
18
19
|
|
@@ -24,15 +25,17 @@ module Slanger
|
|
24
25
|
end
|
25
26
|
|
26
27
|
def lookup(channel_id)
|
27
|
-
all
|
28
|
+
all[channel_id]
|
28
29
|
end
|
29
30
|
|
30
31
|
def create(params = {})
|
31
|
-
new(params).tap
|
32
|
+
new(params).tap do |channel|
|
33
|
+
all[channel.channel_id] = channel
|
34
|
+
end
|
32
35
|
end
|
33
36
|
|
34
37
|
def all
|
35
|
-
@all ||=
|
38
|
+
@all ||= {}
|
36
39
|
end
|
37
40
|
|
38
41
|
def unsubscribe(channel_id, subscription_id)
|
@@ -54,7 +57,7 @@ module Slanger
|
|
54
57
|
end
|
55
58
|
|
56
59
|
def subscribe(*a, &blk)
|
57
|
-
Slanger::Redis.
|
60
|
+
Slanger::Redis.channel_attend([CHANNEL_SUBSCRIBER_COUNT_KEY], [channel_id]).
|
58
61
|
callback do |value|
|
59
62
|
Slanger::Webhook.post name: "channel_occupied", channel: channel_id if value == 1
|
60
63
|
end
|
@@ -63,9 +66,9 @@ module Slanger
|
|
63
66
|
end
|
64
67
|
|
65
68
|
def unsubscribe(*a, &blk)
|
66
|
-
Slanger::Redis.
|
69
|
+
Slanger::Redis.channel_leave([CHANNEL_SUBSCRIBER_COUNT_KEY], [channel_id]).
|
67
70
|
callback do |value|
|
68
|
-
Slanger::Webhook.post name: "channel_vacated", channel: channel_id if value ==
|
71
|
+
Slanger::Webhook.post name: "channel_vacated", channel: channel_id if value == 1
|
69
72
|
end
|
70
73
|
|
71
74
|
channel.unsubscribe *a, &blk
|
@@ -93,7 +96,7 @@ module Slanger
|
|
93
96
|
private
|
94
97
|
|
95
98
|
def perform_client_webhook!(message)
|
96
|
-
if
|
99
|
+
if message["event"].start_with?("client-")
|
97
100
|
event = message.merge({ "name" => "client_event" })
|
98
101
|
event["data"] = Oj.dump(event["data"])
|
99
102
|
|
data/lib/slanger/config.rb
CHANGED
@@ -12,9 +12,15 @@ module Slanger
|
|
12
12
|
|
13
13
|
def options
|
14
14
|
@options ||= {
|
15
|
-
api_host: "0.0.0.0",
|
16
|
-
|
17
|
-
|
15
|
+
api_host: "0.0.0.0",
|
16
|
+
api_port: "4567",
|
17
|
+
websocket_host: "0.0.0.0",
|
18
|
+
websocket_port: "8080",
|
19
|
+
debug: false,
|
20
|
+
redis_address: "redis://0.0.0.0:6379/0",
|
21
|
+
socket_handler: Slanger::Handler,
|
22
|
+
require: [],
|
23
|
+
activity_timeout: 120,
|
18
24
|
}
|
19
25
|
end
|
20
26
|
|
data/lib/slanger/connection.rb
CHANGED
@@ -22,7 +22,7 @@ module Slanger
|
|
22
22
|
begin
|
23
23
|
send_payload nil, "pusher:error", e
|
24
24
|
rescue EventMachine::WebSocket::WebSocketError
|
25
|
-
# Raised if
|
25
|
+
# Raised if connection already closed. Only seen with Thor load testing tool
|
26
26
|
end
|
27
27
|
end
|
28
28
|
|
data/lib/slanger/handler.rb
CHANGED
@@ -65,7 +65,7 @@ module Slanger
|
|
65
65
|
end
|
66
66
|
|
67
67
|
def unsubscribe(public_subscription_id)
|
68
|
-
#
|
68
|
+
# Unsubscribe from EM::Channel
|
69
69
|
channel.unsubscribe(internal_subscription_table.delete(public_subscription_id)) # if internal_subscription_table[public_subscription_id]
|
70
70
|
# Remove subscription data from Redis
|
71
71
|
roster_remove public_subscription_id
|
data/lib/slanger/redis.rb
CHANGED
@@ -34,6 +34,14 @@ module Slanger
|
|
34
34
|
send_command :hdel, *arg
|
35
35
|
end
|
36
36
|
|
37
|
+
def channel_leave(*arg)
|
38
|
+
send_command :channel_leave, *arg
|
39
|
+
end
|
40
|
+
|
41
|
+
def channel_attend(*arg)
|
42
|
+
send_command :channel_attend, *arg
|
43
|
+
end
|
44
|
+
|
37
45
|
def hgetall(*arg)
|
38
46
|
send_command :hgetall, *arg
|
39
47
|
end
|
data/lib/slanger/version.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
$:.unshift(File.expand_path('../../lib', __FILE__))
|
2
|
+
require 'em-hiredis'
|
1
3
|
require "eventmachine"
|
2
4
|
require "em-websocket"
|
3
5
|
|
@@ -10,6 +12,8 @@ module Slanger
|
|
10
12
|
end
|
11
13
|
|
12
14
|
EM.run do
|
15
|
+
scripts_dir = File.expand_path("../lua", __FILE__)
|
16
|
+
EM::Hiredis::Client.load_scripts_from(scripts_dir)
|
13
17
|
options = {
|
14
18
|
host: Slanger::Config[:websocket_host],
|
15
19
|
port: Slanger::Config[:websocket_port],
|
@@ -24,7 +28,7 @@ module Slanger
|
|
24
28
|
|
25
29
|
EM::WebSocket.start options do |ws|
|
26
30
|
# Keep track of handler instance in instance of EM::Connection to ensure a unique handler instance is used per connection.
|
27
|
-
ws.class_eval { attr_accessor :connection_handler }
|
31
|
+
ws.class.class_eval { attr_accessor :connection_handler } unless ws.respond_to?(:connection_handler)
|
28
32
|
# Delegate connection management to handler instance.
|
29
33
|
ws.onopen { |handshake| ws.connection_handler = Slanger::Config.socket_handler.new ws, handshake }
|
30
34
|
ws.onmessage { |msg| ws.connection_handler.onmessage msg }
|
metadata
CHANGED
@@ -1,17 +1,18 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: oceanex-slanger
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.7.
|
4
|
+
version: 0.7.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Joblee
|
8
8
|
- Steve
|
9
|
-
- Yao
|
10
9
|
- Meng
|
10
|
+
- Sniper
|
11
|
+
- Jiayu
|
11
12
|
autorequire:
|
12
13
|
bindir: bin
|
13
14
|
cert_chain: []
|
14
|
-
date:
|
15
|
+
date: 2022-03-16 00:00:00.000000000 Z
|
15
16
|
dependencies:
|
16
17
|
- !ruby/object:Gem::Dependency
|
17
18
|
name: eventmachine
|
@@ -47,28 +48,28 @@ dependencies:
|
|
47
48
|
requirements:
|
48
49
|
- - "~>"
|
49
50
|
- !ruby/object:Gem::Version
|
50
|
-
version: 0.5.
|
51
|
+
version: 0.5.2
|
51
52
|
type: :runtime
|
52
53
|
prerelease: false
|
53
54
|
version_requirements: !ruby/object:Gem::Requirement
|
54
55
|
requirements:
|
55
56
|
- - "~>"
|
56
57
|
- !ruby/object:Gem::Version
|
57
|
-
version: 0.5.
|
58
|
+
version: 0.5.2
|
58
59
|
- !ruby/object:Gem::Dependency
|
59
60
|
name: rack
|
60
61
|
requirement: !ruby/object:Gem::Requirement
|
61
62
|
requirements:
|
62
63
|
- - "~>"
|
63
64
|
- !ruby/object:Gem::Version
|
64
|
-
version:
|
65
|
+
version: 2.2.3
|
65
66
|
type: :runtime
|
66
67
|
prerelease: false
|
67
68
|
version_requirements: !ruby/object:Gem::Requirement
|
68
69
|
requirements:
|
69
70
|
- - "~>"
|
70
71
|
- !ruby/object:Gem::Version
|
71
|
-
version:
|
72
|
+
version: 2.2.3
|
72
73
|
- !ruby/object:Gem::Dependency
|
73
74
|
name: rack-fiber_pool
|
74
75
|
requirement: !ruby/object:Gem::Requirement
|
@@ -103,14 +104,14 @@ dependencies:
|
|
103
104
|
requirements:
|
104
105
|
- - "~>"
|
105
106
|
- !ruby/object:Gem::Version
|
106
|
-
version: 6.
|
107
|
+
version: 6.1.3.2
|
107
108
|
type: :runtime
|
108
109
|
prerelease: false
|
109
110
|
version_requirements: !ruby/object:Gem::Requirement
|
110
111
|
requirements:
|
111
112
|
- - "~>"
|
112
113
|
- !ruby/object:Gem::Version
|
113
|
-
version: 6.
|
114
|
+
version: 6.1.3.2
|
114
115
|
- !ruby/object:Gem::Dependency
|
115
116
|
name: sinatra
|
116
117
|
requirement: !ruby/object:Gem::Requirement
|
@@ -131,14 +132,14 @@ dependencies:
|
|
131
132
|
requirements:
|
132
133
|
- - "~>"
|
133
134
|
- !ruby/object:Gem::Version
|
134
|
-
version: 1.
|
135
|
+
version: 1.8.1
|
135
136
|
type: :runtime
|
136
137
|
prerelease: false
|
137
138
|
version_requirements: !ruby/object:Gem::Requirement
|
138
139
|
requirements:
|
139
140
|
- - "~>"
|
140
141
|
- !ruby/object:Gem::Version
|
141
|
-
version: 1.
|
142
|
+
version: 1.8.1
|
142
143
|
- !ruby/object:Gem::Dependency
|
143
144
|
name: em-http-request
|
144
145
|
requirement: !ruby/object:Gem::Requirement
|
@@ -159,98 +160,98 @@ dependencies:
|
|
159
160
|
requirements:
|
160
161
|
- - "~>"
|
161
162
|
- !ruby/object:Gem::Version
|
162
|
-
version: 3.
|
163
|
+
version: 3.11.6
|
163
164
|
type: :runtime
|
164
165
|
prerelease: false
|
165
166
|
version_requirements: !ruby/object:Gem::Requirement
|
166
167
|
requirements:
|
167
168
|
- - "~>"
|
168
169
|
- !ruby/object:Gem::Version
|
169
|
-
version: 3.
|
170
|
+
version: 3.11.6
|
170
171
|
- !ruby/object:Gem::Dependency
|
171
172
|
name: rspec
|
172
173
|
requirement: !ruby/object:Gem::Requirement
|
173
174
|
requirements:
|
174
175
|
- - "~>"
|
175
176
|
- !ruby/object:Gem::Version
|
176
|
-
version: 3.
|
177
|
+
version: 3.10.0
|
177
178
|
type: :development
|
178
179
|
prerelease: false
|
179
180
|
version_requirements: !ruby/object:Gem::Requirement
|
180
181
|
requirements:
|
181
182
|
- - "~>"
|
182
183
|
- !ruby/object:Gem::Version
|
183
|
-
version: 3.
|
184
|
+
version: 3.10.0
|
184
185
|
- !ruby/object:Gem::Dependency
|
185
186
|
name: pusher
|
186
187
|
requirement: !ruby/object:Gem::Requirement
|
187
188
|
requirements:
|
188
189
|
- - "~>"
|
189
190
|
- !ruby/object:Gem::Version
|
190
|
-
version:
|
191
|
+
version: 2.0.1
|
191
192
|
type: :development
|
192
193
|
prerelease: false
|
193
194
|
version_requirements: !ruby/object:Gem::Requirement
|
194
195
|
requirements:
|
195
196
|
- - "~>"
|
196
197
|
- !ruby/object:Gem::Version
|
197
|
-
version:
|
198
|
+
version: 2.0.1
|
198
199
|
- !ruby/object:Gem::Dependency
|
199
200
|
name: haml
|
200
201
|
requirement: !ruby/object:Gem::Requirement
|
201
202
|
requirements:
|
202
203
|
- - "~>"
|
203
204
|
- !ruby/object:Gem::Version
|
204
|
-
version: 5.1
|
205
|
+
version: 5.2.1
|
205
206
|
type: :development
|
206
207
|
prerelease: false
|
207
208
|
version_requirements: !ruby/object:Gem::Requirement
|
208
209
|
requirements:
|
209
210
|
- - "~>"
|
210
211
|
- !ruby/object:Gem::Version
|
211
|
-
version: 5.1
|
212
|
+
version: 5.2.1
|
212
213
|
- !ruby/object:Gem::Dependency
|
213
214
|
name: timecop
|
214
215
|
requirement: !ruby/object:Gem::Requirement
|
215
216
|
requirements:
|
216
217
|
- - "~>"
|
217
218
|
- !ruby/object:Gem::Version
|
218
|
-
version: 0.9.
|
219
|
+
version: 0.9.4
|
219
220
|
type: :development
|
220
221
|
prerelease: false
|
221
222
|
version_requirements: !ruby/object:Gem::Requirement
|
222
223
|
requirements:
|
223
224
|
- - "~>"
|
224
225
|
- !ruby/object:Gem::Version
|
225
|
-
version: 0.9.
|
226
|
+
version: 0.9.4
|
226
227
|
- !ruby/object:Gem::Dependency
|
227
228
|
name: webmock
|
228
229
|
requirement: !ruby/object:Gem::Requirement
|
229
230
|
requirements:
|
230
231
|
- - "~>"
|
231
232
|
- !ruby/object:Gem::Version
|
232
|
-
version: 3.
|
233
|
+
version: 3.13.0
|
233
234
|
type: :development
|
234
235
|
prerelease: false
|
235
236
|
version_requirements: !ruby/object:Gem::Requirement
|
236
237
|
requirements:
|
237
238
|
- - "~>"
|
238
239
|
- !ruby/object:Gem::Version
|
239
|
-
version: 3.
|
240
|
+
version: 3.13.0
|
240
241
|
- !ruby/object:Gem::Dependency
|
241
242
|
name: mocha
|
242
243
|
requirement: !ruby/object:Gem::Requirement
|
243
244
|
requirements:
|
244
245
|
- - "~>"
|
245
246
|
- !ruby/object:Gem::Version
|
246
|
-
version: 1.
|
247
|
+
version: 1.12.0
|
247
248
|
type: :development
|
248
249
|
prerelease: false
|
249
250
|
version_requirements: !ruby/object:Gem::Requirement
|
250
251
|
requirements:
|
251
252
|
- - "~>"
|
252
253
|
- !ruby/object:Gem::Version
|
253
|
-
version: 1.
|
254
|
+
version: 1.12.0
|
254
255
|
- !ruby/object:Gem::Dependency
|
255
256
|
name: pry
|
256
257
|
requirement: !ruby/object:Gem::Requirement
|
@@ -285,28 +286,28 @@ dependencies:
|
|
285
286
|
requirements:
|
286
287
|
- - "~>"
|
287
288
|
- !ruby/object:Gem::Version
|
288
|
-
version: 2.
|
289
|
+
version: 2.2.20
|
289
290
|
type: :development
|
290
291
|
prerelease: false
|
291
292
|
version_requirements: !ruby/object:Gem::Requirement
|
292
293
|
requirements:
|
293
294
|
- - "~>"
|
294
295
|
- !ruby/object:Gem::Version
|
295
|
-
version: 2.
|
296
|
+
version: 2.2.20
|
296
297
|
- !ruby/object:Gem::Dependency
|
297
298
|
name: rake
|
298
299
|
requirement: !ruby/object:Gem::Requirement
|
299
300
|
requirements:
|
300
301
|
- - "~>"
|
301
302
|
- !ruby/object:Gem::Version
|
302
|
-
version: 13.0.
|
303
|
+
version: 13.0.3
|
303
304
|
type: :development
|
304
305
|
prerelease: false
|
305
306
|
version_requirements: !ruby/object:Gem::Requirement
|
306
307
|
requirements:
|
307
308
|
- - "~>"
|
308
309
|
- !ruby/object:Gem::Version
|
309
|
-
version: 13.0.
|
310
|
+
version: 13.0.3
|
310
311
|
description: The Oceanex Slanger inherits from unmaintained project Slanger and continue
|
311
312
|
to provide update and fixes
|
312
313
|
email:
|
@@ -328,6 +329,8 @@ files:
|
|
328
329
|
- lib/slanger/connection.rb
|
329
330
|
- lib/slanger/handler.rb
|
330
331
|
- lib/slanger/logger.rb
|
332
|
+
- lib/slanger/lua/channel_attend.lua
|
333
|
+
- lib/slanger/lua/channel_leave.lua
|
331
334
|
- lib/slanger/presence_channel.rb
|
332
335
|
- lib/slanger/presence_subscription.rb
|
333
336
|
- lib/slanger/private_subscription.rb
|
@@ -357,7 +360,7 @@ licenses:
|
|
357
360
|
- MIT
|
358
361
|
metadata:
|
359
362
|
homepage_uri: https://github.com/OceanEx/slanger
|
360
|
-
source_code_uri: https://github.com/OceanEx/slanger/archive/v0.7.
|
363
|
+
source_code_uri: https://github.com/OceanEx/slanger/archive/v0.7.3.0.zip
|
361
364
|
changelog_uri: https://github.com/OceanEx/slanger/releases
|
362
365
|
post_install_message:
|
363
366
|
rdoc_options: []
|