@@ -52,6 +52,9 @@ def initialize(event_loop)
5252 @critical = Concurrent ::Semaphore . new ( 0 )
5353
5454 @thread = Thread . new do
55+ Thread . current . name = "solid_cable_listener"
56+ Thread . current . report_on_exception = true
57+
5558 listen
5659 end
5760 end
@@ -103,6 +106,11 @@ def invoke_callback(*)
103106
104107 private
105108 attr_reader :event_loop , :thread
109+ attr_writer :last_id
110+
111+ def last_id
112+ @last_id ||= last_message_id
113+ end
106114
107115 def last_message_id
108116 ::SolidCable ::Message . maximum ( :id ) || 0
@@ -116,14 +124,18 @@ def broadcast_messages
116124 current_channels = channels . dup
117125
118126 ::SolidCable ::Message .
119- broadcastable ( current_channels . keys , current_channels . values . min ) .
127+ broadcastable ( current_channels . keys , last_id ) .
120128 each do |message |
121- channels . compute_if_present ( message . channel ) do |last_id |
122- break if last_id >= 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
123132
124- broadcast ( message . channel , message . payload )
133+ should_broadcast_message = true
125134 message . id
126135 end
136+
137+ broadcast ( message . channel , message . payload ) if should_broadcast_message
138+ self . last_id = message . id
127139 end
128140 end
129141
0 commit comments