X-Git-Url: http://git.sourceforge.jp/view?a=blobdiff_plain;f=test%2Fbenchmark.rb;h=28539d7b3f1f0acd6d5e797e3be1aeea95788680;hb=87d145bd1f1a14a33f5f6fbc78b63a1952f1ca90;hp=2d3be050ff1ab6ffb8d431d27def7f493d1aa322;hpb=29322c5617e086c4a1bac76760c4bc747b1f029a;p=shogi-server%2Fshogi-server.git diff --git a/test/benchmark.rb b/test/benchmark.rb index 2d3be05..28539d7 100644 --- a/test/benchmark.rb +++ b/test/benchmark.rb @@ -1,14 +1,18 @@ #!/usr/bin/ruby +require 'logger' require 'socket' require 'thread' +$logger = nil + class BenchPlayer def initialize(game_name, name, sente) @game_name = game_name @name = "%s_%s" % [game_name, name] @turn_mark = sente ? "+" : "-" @nmoves = 0 + @socket = nil end attr_reader :nmoves @@ -22,37 +26,42 @@ class BenchPlayer def reader Thread.new do + Thread.pass loop do - if r = select([@socket], nil, nil, 10) + if r = select([@socket], nil, nil, 300) str = r[0].first.gets if %r!^[\+\-]\d{4}\w{2},T\d+$! =~ str @nmoves += 1 end - @message << str + @message << str if str else - raise "timed out" + $logger.warn "Timed out: %s" % [@name] end end + $logger.error "Socket error: %s" % [@name] end end def wait(reg) loop do break if reg =~ @message - sleep 0.1 + #$logger.debug "WAIT %s: %s" % [reg, @message] + sleep 0.001 + #Thread.pass end end def wait_nmoves(n) loop do break if @nmoves == n - sleep 0.01 + sleep 0.001 + #Thread.pass end end def login @socket.puts "LOGIN #{@name} dummy x1" - wait %r!^LOGIN! + wait %r!^##\[LOGIN\] \+OK! end def game @@ -94,12 +103,20 @@ class BenchGame end def start + $logger.info "Starting... %s" % [@game_name] + $logger.debug "Connecting... %s" % [@game_name] each_player {|player| player.connect} + $logger.debug "Logging in... %s" % [@game_name] each_player {|player| player.login} + $logger.debug "Sending GAME... %s" % [@game_name] each_player {|player| player.game} + $logger.debug "Waiting... %s" % [@game_name] each_player {|player| player.wait %r!^END Game_Summary!} + $logger.debug "Agreeing... %s" % [@game_name] each_player {|player| player.agree} + $logger.debug "AGREE waiting... %s" % [@game_name] each_player {|player| player.wait %r!^START:!} + $logger.info "Started %s" % [@game_name] turn = true # black nmoves = 0 @csa.each_line do |line| @@ -115,10 +132,15 @@ class BenchGame turn = true nmoves += 1 when /^%TORYO/ + $logger.debug "Waiting TORYO... %s" % [@game_name] + @p1.wait_nmoves nmoves + @p2.wait_nmoves nmoves turn ? @p1.toryo : @p2.toryo end end + $logger.info "Logging out... %s" % [@game_name] each_player {|player| player.logout} + $logger.info "Finished %s" % [@game_name] end end @@ -127,11 +149,15 @@ if __FILE__ == $0 filepath = ARGV.shift || File.join(File.dirname(__FILE__), "csa", "wdoor+floodgate-900-0+gps_normal+gps_l+20100507120007.csa") csa = File.open(filepath){|f| f.read} + $logger = Logger.new(STDOUT) + $logger.level = $DEBUG ? Logger::DEBUG : Logger::INFO + nclients = ARGV.shift || 1 nclients = nclients.to_i threads = [] nclients.times do |i| threads << Thread.new do + Thread.pass game = BenchGame.new("b#{i}", csa) game.start end