class Ably::Realtime::Presence::PresenceManager
PresenceManager
is responsible for all actions relating to presence state
This is a private class and should never be used directly by developers as the API is likely to change in future.
@api private
Attributes
presence[R]
{Ably::Realtime::Presence} this Manager is associated with @return [Ably::Realtime::Presence]
Public Class Methods
new(presence)
click to toggle source
# File lib/submodules/ably-ruby/lib/ably/realtime/presence/presence_manager.rb, line 16 def initialize(presence) @presence = presence setup_channel_event_handlers end
Public Instance Methods
sync_expected()
click to toggle source
Expect SYNC ProtocolMessages from the server with a list of current members on this channel
@return [void]
@api private
# File lib/submodules/ably-ruby/lib/ably/realtime/presence/presence_manager.rb, line 27 def sync_expected presence.members.change_state :sync_starting end
sync_not_expected()
click to toggle source
There server has indicated that there are no SYNC ProtocolMessages to come because there are no members on this channel
@return [void]
@api private
# File lib/submodules/ably-ruby/lib/ably/realtime/presence/presence_manager.rb, line 56 def sync_not_expected logger.debug { "#{self.class.name}: Emitting leave events for all members as a SYNC is not expected and thus there are no members on the channel" } presence.members.change_state :sync_none end
sync_process_messages(serial, presence_messages)
click to toggle source
Process presence messages from SYNC messages. Sync can be server-initiated or triggered following ATTACH
@return [void]
@api private
# File lib/submodules/ably-ruby/lib/ably/realtime/presence/presence_manager.rb, line 36 def sync_process_messages(serial, presence_messages) unless presence.members.sync_starting? presence.members.change_state :sync_starting end presence.members.update_sync_serial serial presence_messages.each do |presence_message| presence.__incoming_msgbus__.publish :sync, presence_message end presence.members.change_state :finalizing_sync if presence.members.sync_serial_cursor_at_end? end
Private Instance Methods
logger()
click to toggle source
# File lib/submodules/ably-ruby/lib/ably/realtime/presence/presence_manager.rb, line 78 def logger presence.channel.client.logger end
setup_channel_event_handlers()
click to toggle source
# File lib/submodules/ably-ruby/lib/ably/realtime/presence/presence_manager.rb, line 64 def setup_channel_event_handlers channel.unsafe_on(:detached) do if !presence.initialized? presence.transition_state_machine :left if presence.can_transition_to?(:left) end end channel.unsafe_on(:failed) do |metadata| if !presence.initialized? presence.transition_state_machine :left, metadata if presence.can_transition_to?(:left) end end end