Sha256: e938be01d42b37195bcfd965ae3f2ea16d940b37b4cdb8fe3ee20b5b28b6c860

Contents?: true

Size: 1.38 KB

Versions: 2

Compression:

Stored size: 1.38 KB

Contents

require "thread"

module Bunny
  class ChannelIdAllocator

    #
    # API
    #

    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] 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)


    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

2 entries across 2 versions & 1 rubygems

Version Path
bunny-0.9.0.pre2 lib/bunny/channel_id_allocator.rb
bunny-0.9.0.pre1 lib/bunny/channel_id_allocator.rb