module ActiveExchange class Channel def initialize(name:, server: ActiveExchange.server) @server = server @channel = name @queue = Queue.new @subscribe = false end def broadcast(message) Rails.logger.info "ActiveExchange: Publishing #{message.inspect} to #{@channel.inspect}" @server.broadcast(@channel, message) end def subscribe return if @subscribed @subscribed = true Rails.logger.info "ActiveExchange: Subscribed to #{@channel.inspect}" @server.subscribe(@channel, -> (message) { @queue << message }) end def read subscribe @queue.pop end end def self.server ActionCable.server.pubsub end end