X-Git-Url: http://git.sourceforge.jp/view?p=shogi-server%2Fshogi-server.git;a=blobdiff_plain;f=shogi_server%2Fgame.rb;h=e920105859c6b6ac02645a56a54d277a5511b08e;hp=532c5524be5193a74ad1ad399aad203efd1e791b;hb=4c035e78bfb18c0725313ec8da5721254c39a84e;hpb=bd654851220da09d022b6aa3bb9217ddfe6170e0 diff --git a/shogi_server/game.rb b/shogi_server/game.rb index 532c552..e920105 100644 --- a/shogi_server/game.rb +++ b/shogi_server/game.rb @@ -31,7 +31,7 @@ class Game @@mutex = Mutex.new @@time = 0 def initialize(game_name, player0, player1, board) - @monitors = Array::new + @monitors = Array::new # array of MonitorHandler* @game_name = game_name if (@game_name =~ /-(\d+)-(\d+)$/) @total_time = $1.to_i @@ -100,18 +100,18 @@ class Game return player.status == "game" && @current_player == player end - def monitoron(monitor) - @monitors.delete(monitor) - @monitors.push(monitor) + def monitoron(monitor_handler) + monitoroff(monitor_handler) + @monitors.push(monitor_handler) end - def monitoroff(monitor) - @monitors.delete(monitor) + def monitoroff(monitor_handler) + @monitors.delete_if {|mon| mon == monitor_handler} end def each_monitor - @monitors.each do |monitor| - yield monitor + @monitors.each do |monitor_handler| + yield monitor_handler end end @@ -174,7 +174,7 @@ class Game end # class Game - def handle_one_move(str, player) + def handle_one_move(str, player, end_time) unless turn?(player) return false if str == :timeout @@ -186,7 +186,7 @@ class Game end finish_flag = true - @end_time = Time::new + @end_time = end_time t = [(@end_time - @start_time).floor, Least_Time_Per_Move].max move_status = nil @@ -207,20 +207,20 @@ class Game if [:illegal, :uchifuzume, :oute_kaihimore].include?(move_status) @fh.printf("'ILLEGAL_MOVE(%s)\n", str) else - if [:normal, :outori, :sennichite, :oute_sennichite_sente_lose, :oute_sennichite_gote_lose].include?(move_status) + if :toryo != move_status # Thinking time includes network traffic @sente.write_safe(sprintf("%s,T%d\n", str, t)) @gote.write_safe(sprintf("%s,T%d\n", str, t)) @fh.printf("%s\nT%d\n", str, t) @last_move = sprintf("%s,T%d", str, t) @current_turn += 1 - end - @monitors.each do |monitor| - monitor.write_safe(show.gsub(/^/, "##[MONITOR][#{@game_id}] ")) - monitor.write_safe(sprintf("##[MONITOR][%s] +OK\n", @game_id)) - end - end + @monitors.each do |monitor_handler| + monitor_handler.write_one_move(@game_id, self) + end + end # if + # if move_status is :toryo then a GameResult message will be sent to monitors + end # if end @result = nil