Sha256: 06a4dbcbd19db4b2046b56ddee64d44de72a2c562ac225e418f7da3397eb0329

Contents?: true

Size: 1.51 KB

Versions: 15

Compression:

Stored size: 1.51 KB

Contents

# frozen_string_literal: true

begin
  require "nats/client"
rescue LoadError
  raise "Please, install the nats-pure gem to use NATS broadcast adapter"
end

require "json"

module AnyCable
  module BroadcastAdapters
    # NATS adapter for broadcasting.
    #
    # Example:
    #
    #   AnyCable.broadcast_adapter = :nats
    #
    # It uses NATS configuration from global AnyCable config
    # by default.
    #
    # You can override these params:
    #
    #   AnyCable.broadcast_adapter = :nats, servers: "nats://my_nats:4242", channel: "_any_cable_"
    class Nats < Base
      attr_reader :nats_conn, :channel

      def initialize(
        channel: AnyCable.config.nats_channel,
        **options
      )
        options = AnyCable.config.to_nats_params.merge(options)
        @nats_conn = ::NATS.connect(nil, options)
        setup_listeners(nats_conn)
        @channel = channel
      end

      def raw_broadcast(payload)
        nats_conn.publish(channel, payload)
      end

      def announce!
        logger.info "Broadcasting NATS channel: #{channel}"
      end

      private

      def setup_listeners(nats_client)
        nats_client.on_disconnect { logger.info "NATS client disconnected" }
        nats_client.on_reconnect do
          info = nats_client.server_info
          logger.info "NATS client reconnected: host=#{info[:host]}:#{info[:port]} cluster=#{info[:cluster]}"
        end
        nats_client.on_error do |err|
          logger.warn "NATS client error: #{err.message}"
        end
      end
    end
  end
end

Version data entries

15 entries across 15 versions & 1 rubygems

Version Path
anycable-core-1.6.0.rc.1 lib/anycable/broadcast_adapters/nats.rb
anycable-core-1.5.2 lib/anycable/broadcast_adapters/nats.rb
anycable-core-1.5.1 lib/anycable/broadcast_adapters/nats.rb
anycable-core-1.5.0 lib/anycable/broadcast_adapters/nats.rb
anycable-core-1.4.4 lib/anycable/broadcast_adapters/nats.rb
anycable-core-1.5.0.rc.1 lib/anycable/broadcast_adapters/nats.rb
anycable-core-1.4.3 lib/anycable/broadcast_adapters/nats.rb
anycable-core-1.4.2 lib/anycable/broadcast_adapters/nats.rb
anycable-core-1.4.1 lib/anycable/broadcast_adapters/nats.rb
anycable-core-1.4.0 lib/anycable/broadcast_adapters/nats.rb
anycable-core-1.4.0.rc.3 lib/anycable/broadcast_adapters/nats.rb
anycable-core-1.4.0.rc.2 lib/anycable/broadcast_adapters/nats.rb
anycable-core-1.4.0.rc.1 lib/anycable/broadcast_adapters/nats.rb
anycable-core-1.4.0.pre.rc.1 lib/anycable/broadcast_adapters/nats.rb
anycable-core-1.3.1 lib/anycable/broadcast_adapters/nats.rb