class MyJobDojinEventMachine

for EventMachine

Private Instance Methods

do_connect() click to toggle source
# File lib/lib/job.rb, line 689
def do_connect
  return if file_already_saved?

  #      if @machine.connection_exceed? #コネクション限界を超えていないか?
  #        @machine.retry(self)
  #        print "E".red.bold
  #        return
  #      end

  @http = EventMachine::Protocols::HttpClient.
    request(
            :host => @args[:server],
            :port => @args[:port],
            :request => @args[:path],
            :cookie => @args[:cookie]['Cookie']
            )
  @machine.connection_count!
  @http.errback{
    begin
    ensure
      @machine.connection_end!
    end
  }

  @http.callback {|response|
    begin
      if response[:status] == 200
        # 200 はレスポンスの中身を保存する
        save_content(response[:content])
      elsif response[:status] == 503 ||
          response[:status] == 500 ||
          response[:status] == 403
        # 503/500/403はリトライする
        @args[:try] += 1
        @machine.retry(self) if @args[:try] < 6
      elsif response[:status] == 404
        # 404は終了する
      else 
        puts response[:status].to_s.red.bold
        puts response[:headers].to_s.red.bold
      end
    ensure
      @machine.connection_end!
    end
  }
end