solid_cable 4.0.0 → 4.0.1
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/lib/action_cable/subscription_adapter/solid_cable.rb +27 -8
- data/lib/solid_cable/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 10e383ae37ea3643b84e98e513c1123340c94db2d3c0d9683c6bbd1f86f6b3dc
|
|
4
|
+
data.tar.gz: b883a4c70ca58c0bada49bc4ee0b42e3cac9e5c4260c42a6a2ffb2ade678ee26
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: c7a8924daed8e0b78e9955bad3cc800f33bb917f0fab735ea1e892af037aa51f1e5ab64fc14f363d077f3ae748e977be192d36f42c86730119e1f21729dbc508
|
|
7
|
+
data.tar.gz: 412baa21c8913721f097d49ceeddc9b893634c3412936fd7f8b9bfbd1d454ed5343b2677a76c785aac6ef72cf8b8edb70bae23631fcc02622a72fdd4ee3bceb0
|
|
@@ -12,6 +12,13 @@ module ActionCable
|
|
|
12
12
|
|
|
13
13
|
def initialize(*)
|
|
14
14
|
super
|
|
15
|
+
@mutex =
|
|
16
|
+
if defined?(@server)
|
|
17
|
+
@server.mutex
|
|
18
|
+
else
|
|
19
|
+
Mutex.new
|
|
20
|
+
end
|
|
21
|
+
|
|
15
22
|
@listener = nil
|
|
16
23
|
end
|
|
17
24
|
|
|
@@ -33,11 +40,20 @@ module ActionCable
|
|
|
33
40
|
|
|
34
41
|
private
|
|
35
42
|
def listener
|
|
36
|
-
@listener || @
|
|
37
|
-
@listener ||= Listener.new(
|
|
43
|
+
@listener || @mutex.synchronize do
|
|
44
|
+
@listener ||= Listener.new(self, pubsub_executor)
|
|
38
45
|
end
|
|
39
46
|
end
|
|
40
47
|
|
|
48
|
+
def pubsub_executor
|
|
49
|
+
@pubsub_executor ||=
|
|
50
|
+
if respond_to?(:executor, true)
|
|
51
|
+
executor
|
|
52
|
+
else
|
|
53
|
+
@server.event_loop
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
|
|
41
57
|
class Listener < ::ActionCable::SubscriptionAdapter::SubscriberMap
|
|
42
58
|
CONNECTION_ERRORS = [
|
|
43
59
|
ActiveRecord::ConnectionFailed,
|
|
@@ -46,10 +62,12 @@ module ActionCable
|
|
|
46
62
|
]
|
|
47
63
|
Stop = Class.new(Exception)
|
|
48
64
|
|
|
49
|
-
|
|
50
|
-
super()
|
|
65
|
+
delegate :logger, to: :@adapter
|
|
51
66
|
|
|
52
|
-
|
|
67
|
+
def initialize(adapter, executor)
|
|
68
|
+
super()
|
|
69
|
+
@adapter = adapter
|
|
70
|
+
@executor = executor
|
|
53
71
|
|
|
54
72
|
# Critical section begins with 0 permits. It can be understood as
|
|
55
73
|
# being "normally held" by the listener thread. It is released
|
|
@@ -105,7 +123,7 @@ module ActionCable
|
|
|
105
123
|
|
|
106
124
|
def add_channel(channel, on_success)
|
|
107
125
|
channels[channel] = last_message_id
|
|
108
|
-
|
|
126
|
+
on_success.call if on_success
|
|
109
127
|
end
|
|
110
128
|
|
|
111
129
|
def remove_channel(channel)
|
|
@@ -113,11 +131,11 @@ module ActionCable
|
|
|
113
131
|
end
|
|
114
132
|
|
|
115
133
|
def invoke_callback(*)
|
|
116
|
-
|
|
134
|
+
executor.post { super }
|
|
117
135
|
end
|
|
118
136
|
|
|
119
137
|
private
|
|
120
|
-
attr_reader :
|
|
138
|
+
attr_reader :executor, :thread
|
|
121
139
|
attr_accessor :last_id, :reconnect_attempt
|
|
122
140
|
|
|
123
141
|
def last_message_id
|
|
@@ -143,6 +161,7 @@ module ActionCable
|
|
|
143
161
|
end
|
|
144
162
|
|
|
145
163
|
broadcast(message.channel, message.payload) if should_broadcast_message
|
|
164
|
+
self.reconnect_attempt = 0
|
|
146
165
|
self.last_id = message.id
|
|
147
166
|
end
|
|
148
167
|
end
|
data/lib/solid_cable/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: solid_cable
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 4.0.
|
|
4
|
+
version: 4.0.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Nick Pezza
|
|
@@ -125,7 +125,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
125
125
|
- !ruby/object:Gem::Version
|
|
126
126
|
version: '0'
|
|
127
127
|
requirements: []
|
|
128
|
-
rubygems_version: 4.0.
|
|
128
|
+
rubygems_version: 4.0.15
|
|
129
129
|
specification_version: 4
|
|
130
130
|
summary: Database-backed Action Cable backend.
|
|
131
131
|
test_files: []
|