lib/ably/realtime/client/incoming_message_dispatcher.rb in ably-0.7.0 vs lib/ably/realtime/client/incoming_message_dispatcher.rb in ably-0.7.1
- old
+ new
@@ -52,11 +52,11 @@
logger.warn "NACK received: #{protocol_message}"
nack_pending_queue_for_message_serial(protocol_message) if protocol_message.has_message_serial?
when ACTION.Connect
when ACTION.Connected
- connection.transition_state_machine :connected
+ connection.transition_state_machine :connected, protocol_message.error
when ACTION.Disconnect, ACTION.Disconnected
connection.transition_state_machine :disconnected, protocol_message.error
when ACTION.Close
@@ -116,14 +116,24 @@
end
def update_connection_recovery_info(protocol_message)
if protocol_message.connection_key && (protocol_message.connection_key != connection.key)
logger.debug "New connection ID set to #{protocol_message.connection_id} with connection key #{protocol_message.connection_key}"
+ detach_attached_channels protocol_message.error if protocol_message.error
connection.update_connection_id_and_key protocol_message.connection_id, protocol_message.connection_key
end
if protocol_message.has_connection_serial?
connection.update_connection_serial protocol_message.connection_serial
+ end
+ end
+
+ def detach_attached_channels(error)
+ channels.select do |channel|
+ channel.attached? || channel.attaching?
+ end.each do |channel|
+ logger.warn "Detaching channel '#{channel.name}': #{error}"
+ channel.manager.suspend error
end
end
def ack_pending_queue_for_message_serial(ack_protocol_message)
drop_pending_queue_from_ack(ack_protocol_message) do |protocol_message|