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