10 def initialize(game_name, name, sente)
11 @game_name = game_name
12 @name = "%s_%s" % [game_name, name]
13 @turn_mark = sente ? "+" : "-"
21 @socket = TCPSocket.open("localhost", port)
31 if r = select([@socket], nil, nil, 300)
33 if %r!^[\+\-]\d{4}\w{2},T\d+$! =~ str
36 @message << str if str
38 $logger.warn "Timed out: %s" % [@name]
41 $logger.error "Socket error: %s" % [@name]
47 break if reg =~ @message
48 #$logger.debug "WAIT %s: %s" % [reg, @message]
63 @socket.puts "LOGIN #{@name} dummy x1"
64 wait %r!^##\[LOGIN\] \+OK!
68 @socket.puts "%%GAME #{@game_name}-1500-0 #{@turn_mark}"
92 def initialize(game_name, csa)
93 @game_name = game_name
95 @@mutex.synchronize do
96 @p1 = BenchPlayer.new(@game_name, "bp#{@@count+=1}", true)
97 @p2 = BenchPlayer.new(@game_name, "bp#{@@count+=1}", false)
102 [@p1, @p2].each {|player| yield player}
106 $logger.info "Starting... %s" % [@game_name]
107 $logger.debug "Connecting... %s" % [@game_name]
108 each_player {|player| player.connect}
109 $logger.debug "Logging in... %s" % [@game_name]
110 each_player {|player| player.login}
111 $logger.debug "Sending GAME... %s" % [@game_name]
112 each_player {|player| player.game}
113 $logger.debug "Waiting... %s" % [@game_name]
114 each_player {|player| player.wait %r!^END Game_Summary!}
115 $logger.debug "Agreeing... %s" % [@game_name]
116 each_player {|player| player.agree}
117 $logger.debug "AGREE waiting... %s" % [@game_name]
118 each_player {|player| player.wait %r!^START:!}
119 $logger.info "Started %s" % [@game_name]
122 @csa.each_line do |line|
125 @p1.wait_nmoves nmoves
130 @p2.wait_nmoves nmoves
135 $logger.debug "Waiting TORYO... %s" % [@game_name]
136 @p1.wait_nmoves nmoves
137 @p2.wait_nmoves nmoves
138 turn ? @p1.toryo : @p2.toryo
141 $logger.info "Logging out... %s" % [@game_name]
142 each_player {|player| player.logout}
143 $logger.info "Finished %s" % [@game_name]
149 filepath = ARGV.shift || File.join(File.dirname(__FILE__), "csa", "wdoor+floodgate-900-0+gps_normal+gps_l+20100507120007.csa")
150 csa = File.open(filepath){|f| f.read}
152 $logger = Logger.new(STDOUT)
153 $logger.level = $DEBUG ? Logger::DEBUG : Logger::INFO
155 nclients = ARGV.shift || 1
156 nclients = nclients.to_i
158 nclients.times do |i|
159 threads << Thread.new do
161 game = BenchGame.new("b#{i}", csa)
165 threads.each {|t| t.join}