X-Git-Url: http://git.sourceforge.jp/view?p=shogi-server%2Fshogi-server.git;a=blobdiff_plain;f=shogi_server%2Fplayer.rb;h=fa43182ccefd270ce1bea3a3504fe6a6a688a1bf;hp=7d5f91f4a3d6090c5b7a9e3ba6796b9598d3da43;hb=c2a30edbc926be35ad38cbf516ef41b65f4a1f92;hpb=1bfba9c03b6b07f85691b5c5d8fc83cc2ae0ee5b diff --git a/shogi_server/player.rb b/shogi_server/player.rb index 7d5f91f..fa43182 100644 --- a/shogi_server/player.rb +++ b/shogi_server/player.rb @@ -30,7 +30,10 @@ class BasicPlayer @win = 0 @loss = 0 @last_game_win = false + @rating_group = nil + @modified_at = nil @sente = nil + @game_name = "" end # Idetifier of the player in the rating system @@ -60,6 +63,9 @@ class BasicPlayer # true for Sente; false for Gote attr_accessor :sente + # game name + attr_accessor :game_name + def is_human? return [%r!_human$!, %r!_human@!].any? do |re| re.match(@name) @@ -109,6 +115,16 @@ class BasicPlayer @player_id = @password = nil end end + + def set_sente_from_str(str) + case str + when "+" then @sente = true + when "-" then @sente = false + else + # str should be "*" + @sente = nil + end + end end @@ -122,7 +138,6 @@ class Player < BasicPlayer @protocol = nil # CSA or x1 @eol = eol || "\m" # favorite eol code @game = nil - @game_name = "" @mytime = 0 # set in start method also @socket_buffer = [] @main_thread = Thread::current @@ -132,7 +147,7 @@ class Player < BasicPlayer end attr_accessor :socket, :status - attr_accessor :protocol, :eol, :game, :mytime, :game_name + attr_accessor :protocol, :eol, :game, :mytime attr_accessor :main_thread attr_reader :socket_buffer @@ -189,6 +204,7 @@ class Player < BasicPlayer log_debug("Terminating %s's write thread..." % [@name]) if @write_thread && @write_thread.alive? write_safe(nil) + Thread.pass # help the write_thread to terminate end @player_logger.close if @player_logger log_debug("done.") @@ -255,6 +271,7 @@ class Player < BasicPlayer def run(csa_1st_str=nil) while ( csa_1st_str || str = gets_safe(@socket, (@socket_buffer.empty? ? Default_Timeout : 1)) ) + time = Time.now log(:info, :in, str) if str && str.instance_of?(String) $mutex.lock begin @@ -278,7 +295,11 @@ class Player < BasicPlayer end str.chomp! if (str.class == String) # may be strip! ? - cmd = ShogiServer::Command.factory(str, self) + delay = Time.now - time + if delay > 5 + log_warning("Detected a long delay: %.2f sec" % [delay]) + end + cmd = ShogiServer::Command.factory(str, self, time) case cmd.call when :return return @@ -292,6 +313,7 @@ class Player < BasicPlayer $mutex.unlock end end # enf of while + log_warning("%s's socket was suddenly closed" % [@name]) end # def run end # class