OSDN Git Service

* [shogi-server]
[shogi-server/shogi-server.git] / shogi_server / player.rb
index 3a86c96..b6b60f5 100644 (file)
@@ -1,7 +1,7 @@
 ## $Id$
 
 ## Copyright (C) 2004 NABEYA Kenichi (aka nanami@2ch)
-## Copyright (C) 2007-2008 Daigo Moriwaki (daigo at debian dot org)
+## Copyright (C) 2007-2012 Daigo Moriwaki (daigo at debian dot org)
 ##
 ## This program is free software; you can redistribute it and/or modify
 ## it under the terms of the GNU General Public License as published by
@@ -115,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
 
 
@@ -196,7 +206,6 @@ class Player < BasicPlayer
           write_safe(nil)
           Thread.pass # help the write_thread to terminate
         end
-        @player_logger.close if @player_logger
         log_debug("done.")
       rescue
         log_message(sprintf("user %s finish failed", @name))    
@@ -238,6 +247,17 @@ class Player < BasicPlayer
   end
 
   #
+  # Wait for the write thread to finish.
+  # This method should be called just before this instance will be freed.
+  #
+  def wait_write_thread_finish(msec=1000)
+    while msec > 0 && @write_thread && @write_thread.alive?
+      sleep 0.1; msec -= 0.1
+    end
+    @player_logger.close if @player_logger
+  end
+
+  #
   # Note that sending a message is included in the giant lock.
   #
   def write_safe(str)
@@ -297,6 +317,7 @@ class Player < BasicPlayer
           # do nothing
         else
           # TODO never reach
+          log_error("Detected a wrong return value for %s" % [cmd])
         end
 
       ensure