WEBrick独書会 第5回

前回から4ヶ月ほど経っていますが、何事もなく続けます。
どこからか。って言うとGenericServerのinitializeメソッドの途中、
@tokens = ...っていう所からです。

    def initialize(config={}, default=Config::General)
      @config = default.dup.update(config)
      @status = :Stop
      @config[:Logger] ||= Log::new
      @logger = @config[:Logger]

      @tokens = SizedQueue.new(@config[:MaxClients])
      @config[:MaxClients].times{ @tokens.push(nil) }

      webrickv = WEBrick::VERSION
      rubyv = "#{RUBY_VERSION} (#{RUBY_RELEASE_DATE}) [#{RUBY_PLATFORM}]"
      @logger.info("WEBrick #{webrickv}")
      @logger.info("ruby #{rubyv}")

      @listeners = []
      unless @config[:DoNotListen]
        if @config[:Listen]
          warn(":Listen option is deprecated; use GenericServer#listen")
        end
        listen(@config[:BindAddress], @config[:Port])
        if @config[:Port] == 0
          @config[:Port] = @listeners[0].addr[1]
        end
      end
    end
@tokens = SizedQueue.new(@config[:MaxClients])
@config[:MaxClients].times{ @tokens.push(nil) }

いきなり@tokensっていうのがわかりませんなぁ。
SizedQueueは下記アドレスによるとthread操作に使うと便利なクラスの模様。
http://www.ruby-lang.org/ja/man/?cmd=view;name=SizedQueue
@config[:MaxClients]はlib/webrick/config.rb内のGeneral内で100になってるので、
大きさ100のキューを作って、キューは全てnilで埋めている。と。

      webrickv = WEBrick::VERSION
      rubyv = "#{RUBY_VERSION} (#{RUBY_RELEASE_DATE}) [#{RUBY_PLATFORM}]"
      @logger.info("WEBrick #{webrickv}")
      @logger.info("ruby #{rubyv}")

webrickvとrubyvにWEBrickRubyのバージョンを入れてます。
ここで、サーバを起動した時に表示されるバージョンを取得してるんやね。
Logインスタンスのinfoメソッドでバージョンをlogに残してる。
次回以降、早いうちにLogを読もう。

     @listeners = []
      unless @config[:DoNotListen]
        if @config[:Listen]
          warn(":Listen option is deprecated; use GenericServer#listen")
        end
        listen(@config[:BindAddress], @config[:Port])
        if @config[:Port] == 0
          @config[:Port] = @listeners[0].addr[1]
        end
      end

@listenersを空の配列で初期化。
@config[:DoNotListen]の初期値はfalseなので、unless内を実行。
@config[:Listen]はおそらく未定義なので、warnは実行されない。


warnは$stderrにメッセージ出力。
http://www.ruby-lang.org/ja/man/?cmd=view;name=%C1%C8%A4%DF%B9%FE%A4%DF%B4%D8%BF%F4;em=warn#warn
メッセージによると:Listenは廃止されたオプションとの事なので、未定義でokの模様。


listenメソッドからは。。
小分けだけど、次回へ。