Skip to content

Instantly share code, notes, and snippets.

@bradgessler
Last active March 5, 2025 16:55

Revisions

  1. bradgessler revised this gist Sep 12, 2024. No changes.
  2. bradgessler revised this gist Sep 11, 2024. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion active_exchange.rb
    Original file line number Diff line number Diff line change
    @@ -26,6 +26,6 @@ def read
    end

    def self.server
    ActiveCable.server.pubsub
    ActionCable.server.pubsub
    end
    end
  3. bradgessler created this gist Sep 4, 2024.
    31 changes: 31 additions & 0 deletions active_exchange.rb
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,31 @@
    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
    ActiveCable.server.pubsub
    end
    end