Sha256: e6a0ee54bf55239115d48ef04618a4e81f9e896a2363304f848aead77c8d9a9c

Contents?: true

Size: 1.28 KB

Versions: 2

Compression:

Stored size: 1.28 KB

Contents

module Muxer
  class Multiplexer
    attr_reader :requests
    def initialize
      @requests = []
      @timeout = nil
    end

    def add_url(url, timeout = nil)
      request = Request.new
      request.url = url
      request.timeout = timeout if timeout
      requests << request
    end

    def execute
      responses = {succeeded: [], failed: [], pending: []}
      looping = true
      finish = Time.now + @timeout if @timeout
      EventMachine.run do
        requests.each do |request|
          responses[:pending] << request.process!
        end

        EM::PeriodicTimer.new(0.01) do
          responses[:pending].each do |pending|
            # binding.pry
            if pending.completed?
              responses[:pending].delete(pending)
              if pending.error.nil?
                responses[:succeeded] << pending
              else
                responses[:failed] << pending
              end
            end
          end
          if @timeout && Time.now >= finish
            responses[:pending].each do |pending|
              responses[:failed] << pending
            end
            responses[:pending] = []
            EM.stop
          end

          if responses[:pending].empty?
            EM.stop
          end
        end
      end
      responses
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
muxer-0.1.0 lib/muxer/multiplexer.rb
muxer-0.0.4 lib/muxer/multiplexer.rb