Class: WhereIsWaldo::RosterDelivery::Fanout

Inherits:
Base
  • Object
show all
Defined in:
app/services/where_is_waldo/roster_delivery.rb

Overview

Instant per-viewer push for arbitrary/asymmetric visibility. Each viewer streams only their own stream and gets a server-filtered snapshot on connect; on a transition the subject's delta is pushed to every viewer in its directional audience (config.roster_viewers_of). O(audience) per transition — the price of instant delivery under restricted visibility.

Instance Method Summary collapse

Methods inherited from Base

#poll_messages

Instance Method Details

#on_transition(subject_id) ⇒ Object



179
180
181
# File 'app/services/where_is_waldo/roster_delivery.rb', line 179

def on_transition(subject_id)
  Roster.publish_fanout(subject_id)
end

#subscribe_plan(subject, _session_id) ⇒ Object



171
172
173
174
175
176
177
# File 'app/services/where_is_waldo/roster_delivery.rb', line 171

def subscribe_plan(subject, _session_id)
  members = Roster.members_for(config.resolve_visible_to(subject))
  {
    streams: [Roster.viewer_stream(subject.id)],
    messages: [Roster.snapshot_message(members.values, mode: :fanout)]
  }
end