solid_cable 3.0.10 → 3.0.12

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
  SHA256:
3
- metadata.gz: 1f58b4cc20ab57b3a84773c5e86cb01ff4a26cb2ab2ec0467db62d6d44a0cd34
4
- data.tar.gz: ea3a3b978b731f2c8b8a6da3e565fdd3618276fad5ca0360e2583e8938ae2121
3
+ metadata.gz: 2bb120f549ab39af171e93f67350d0ca6b44d2d43e42e23d538c74f894a8e4d4
4
+ data.tar.gz: 13404708ae736ed703e80623b0b8496bbaca984cee263a97818951abb94fe35c
5
5
  SHA512:
6
- metadata.gz: d4e1abe347443f90c6e443721b3820910c567bfe8c7b8d6b4beb4f8849d2ad7816b7c334253215cf0668a7ecb672349ac2d5698ad6f3e55463734381ad442d18
7
- data.tar.gz: e29b2151e8aeb9ce7b74f7f207f2777e1f83ca08eab200978b541d6bfeb87cbc281f0248357a115e1781f3b1439c5f862da7a66ae213ee719447e2998aeaa96f
6
+ metadata.gz: 5fc3825837aa2ee2ff4e805e40a45a2c19471576f91d0f9a0603fdb679542e2a473dd2797cd2a0bf795785ea65d713b01c2c3d0f2ef3bdcdba100608a3cf6115
7
+ data.tar.gz: 1b9474761a35f8aa38063128b6c4fb3a9c30ae94b995e80d1f17eb590cf47ff84f684f557328448d8cc4aa2a26ba509b9b6c32f7ad179d140f9cc23cccca94e9
@@ -52,6 +52,9 @@ module ActionCable
52
52
  @critical = Concurrent::Semaphore.new(0)
53
53
 
54
54
  @thread = Thread.new do
55
+ Thread.current.name = "solid_cable_listener"
56
+ Thread.current.report_on_exception = true
57
+
55
58
  listen
56
59
  end
57
60
  end
@@ -103,23 +106,37 @@ module ActionCable
103
106
 
104
107
  private
105
108
  attr_reader :event_loop, :thread
109
+ attr_writer :last_id
110
+
111
+ def last_id
112
+ @last_id ||= last_message_id
113
+ end
106
114
 
107
115
  def last_message_id
108
116
  ::SolidCable::Message.maximum(:id) || 0
109
117
  end
110
118
 
111
119
  def channels
112
- @channels ||= Concurrent::Hash.new
120
+ @channels ||= Concurrent::Map.new
113
121
  end
114
122
 
115
123
  def broadcast_messages
116
- ::SolidCable::Message.broadcastable(channels.keys, channels.values.min).
124
+ current_channels = channels.dup
125
+
126
+ ::SolidCable::Message.
127
+ broadcastable(current_channels.keys, last_id).
117
128
  each do |message|
118
- if channels[message.channel].present? && channels[message.channel] < message.id
119
- broadcast(message.channel, message.payload)
120
- channels[message.channel] = message.id
129
+ should_broadcast_message = false
130
+ channels.compute_if_present(message.channel) do |channel_last_id|
131
+ break if channel_last_id >= message.id
132
+
133
+ should_broadcast_message = true
134
+ message.id
135
+ end
136
+
137
+ broadcast(message.channel, message.payload) if should_broadcast_message
138
+ self.last_id = message.id
121
139
  end
122
- end
123
140
  end
124
141
 
125
142
  def with_polling_volume
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module SolidCable
4
- VERSION = "3.0.10"
4
+ VERSION = "3.0.12"
5
5
  end
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: 3.0.10
4
+ version: 3.0.12
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nick Pezza