Aggiunge overlay server-side burn-in e stabilizza diretta live.
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>
This commit is contained in:
31
backend/app/jobs/overlay_refresh_job.rb
Normal file
31
backend/app/jobs/overlay_refresh_job.rb
Normal file
@@ -0,0 +1,31 @@
|
||||
class OverlayRefreshJob < ApplicationJob
|
||||
queue_as :default
|
||||
|
||||
INTERVAL = 2.seconds
|
||||
REDIS_CHAIN_KEY = "overlay_refresh:chain:%s"
|
||||
|
||||
def self.schedule_chain(session_id)
|
||||
redis.set(format(REDIS_CHAIN_KEY, session_id), "1", ex: 48.hours.to_i)
|
||||
set(wait: INTERVAL).perform_later(session_id)
|
||||
end
|
||||
|
||||
def self.cancel_chain(session_id)
|
||||
redis.del(format(REDIS_CHAIN_KEY, session_id))
|
||||
end
|
||||
|
||||
def self.redis
|
||||
@redis ||= Redis.new(url: ENV.fetch("REDIS_URL", "redis://localhost:6379/0"))
|
||||
end
|
||||
|
||||
def perform(session_id)
|
||||
return unless self.class.redis.get(format(REDIS_CHAIN_KEY, session_id))
|
||||
|
||||
session = StreamSession.find_by(id: session_id)
|
||||
return self.class.cancel_chain(session_id) unless session
|
||||
return self.class.cancel_chain(session_id) if session.terminal?
|
||||
return self.class.cancel_chain(session_id) unless Streams::OverlayRelay.running?(session_id)
|
||||
|
||||
Streams::Overlay::Refresh.call(session)
|
||||
self.class.set(wait: INTERVAL).perform_later(session_id)
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user