Tabellone, badge e brand sono ricodificati nel flusso _air via OverlayRelay; sync punteggio HTTP, volume condiviso rails/sidekiq, qualità 720p migliorata e badge CONNECTING in ripresa da pausa. Co-authored-by: Cursor <cursoragent@cursor.com>
29 lines
879 B
Ruby
29 lines
879 B
Ruby
module Scoring
|
|
# Sincronizza lo stato completo del tabellone (app mobile / Action Cable).
|
|
class SyncState
|
|
SCORE_KEYS = %w[home_sets away_sets home_points away_points current_set].freeze
|
|
|
|
def initialize(session:, payload:)
|
|
@session = session
|
|
@payload = payload.stringify_keys
|
|
end
|
|
|
|
def call
|
|
score = @session.score_state || @session.create_score_state!(
|
|
home_sets: 0, away_sets: 0, home_points: 0, away_points: 0, current_set: 1, set_partials: []
|
|
)
|
|
|
|
attrs = {}
|
|
SCORE_KEYS.each do |key|
|
|
attrs[key] = @payload[key] if @payload.key?(key)
|
|
end
|
|
attrs[:set_partials] = @payload["set_partials"] if @payload.key?("set_partials")
|
|
|
|
score.update!(attrs)
|
|
SessionChannel.broadcast_message(@session, score.as_cable_payload)
|
|
Streams::Overlay::Refresh.call(@session)
|
|
score
|
|
end
|
|
end
|
|
end
|