Sha256: 719611b2cba4e1d80d1f4edfc020deff9e54cc89f3a4fd5f280decd8c7587cc8

Contents?: true

Size: 1.83 KB

Versions: 1

Compression:

Stored size: 1.83 KB

Contents

require "thread"
require "amq/int_allocator"

module Bunny
  class ChannelIdAllocator

    #
    # API
    #

    # @param [Integer] max_channel Max allowed channel id
    def initialize(max_channel = ((1 << 16) - 1))
      @int_allocator ||= AMQ::IntAllocator.new(1, max_channel)

      @channel_id_mutex ||= Mutex.new
    end


    # Returns next available channel id. This method is thread safe.
    #
    # @return [Fixnum]
    # @api public
    # @see ChannelManager#release_channel_id
    # @see ChannelManager#reset_channel_id_allocator
    def next_channel_id
      @channel_id_mutex.synchronize do
        @int_allocator.allocate
      end
    end

    # Releases previously allocated channel id. This method is thread safe.
    #
    # @param [Fixnum] i Channel id to release
    # @api public
    # @see ChannelManager#next_channel_id
    # @see ChannelManager#reset_channel_id_allocator
    def release_channel_id(i)
      @channel_id_mutex.synchronize do
        @int_allocator.release(i)
      end
    end # self.release_channel_id(i)


    # Returns true if given channel id has been previously allocated and not yet released.
    # This method is thread safe.
    #
    # @param [Fixnum] i Channel id to check
    # @return [Boolean] true if given channel id has been previously allocated and not yet released
    # @api public
    # @see ChannelManager#next_channel_id
    # @see ChannelManager#release_channel_id
    def allocated_channel_id?(i)
      @channel_id_mutex.synchronize do
        @int_allocator.allocated?(i)
      end
    end

    # Resets channel allocator. This method is thread safe.
    # @api public
    # @see Channel.next_channel_id
    # @see Channel.release_channel_id
    def reset_channel_id_allocator
      @channel_id_mutex.synchronize do
        @int_allocator.reset
      end
    end # reset_channel_id_allocator
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
bunny-0.9.0.pre7 lib/bunny/channel_id_allocator.rb