Sha256: ed7632bfaf7d0702213fdf9ad3f467178c14104159d4757d75dfbe39efa88f40

Contents?: true

Size: 1.13 KB

Versions: 3

Compression:

Stored size: 1.13 KB

Contents

module Aws
  class EventEmitter

    def initialize
      @listeners = {}
      @validate_event = true
      @buffer = Queue.new
    end

    attr_accessor :stream

    attr_accessor :encoder

    attr_accessor :validate_event

    attr_reader :buffer

    def on(type, callback)
      (@listeners[type] ||= []) << callback
    end

    def signal(type, event)
      return unless @listeners[type]
      @listeners[type].each do |listener|
        listener.call(event) if event.event_type == type
      end
    end

    def emit(type, params)
      @buffer << Proc.new do
        if @validate_event && type != :end_stream
          Aws::ParamValidator.validate!(
            @encoder.rules.shape.member(type), params)
        end
        @stream.data(
          @encoder.encode(type, params),
          end_stream: type == :end_stream
        )
      end
    end

    private

    class Queue

      def initialize(procs = [])
        @procs = procs
        @mutex = Mutex.new
      end

      def <<(callback)
        @mutex.synchronize { @procs << callback }
      end

      def shift
        @mutex.synchronize { @procs.shift }
      end

    end

  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
aws-sdk-core-3.48.1 lib/aws-sdk-core/event_emitter.rb
aws-sdk-core-3.48.0 lib/aws-sdk-core/event_emitter.rb
aws-sdk-core-3.47.0 lib/aws-sdk-core/event_emitter.rb