OSDN Git Service

New feature: Zero least time per move.
[shogi-server/shogi-server.git] / shogi_server / timeout_queue.rb
index 60189d0..758e5bf 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
@@ -34,7 +34,7 @@ module ShogiServer
 
 class TimeoutQueue
   def initialize(timeout=20)
-    @timeout = 20 # sec
+    @timeout = timeout # sec
     @queue = []
     @mon  = Monitor.new
     @cond = @mon.new_cond
@@ -48,18 +48,16 @@ class TimeoutQueue
   end
 
   #
-  # @return :timeout if timeout
+  # @return :timeout if it timed out
   #
   def deq
     timeout_flg = false
-    ret = nil
-
+    ret = :timeout
     @mon.synchronize do
       if @queue.empty?
-        if @cond.wait(15)
+        unless @cond.wait(@timeout)
           #timeout
           timeout_flg = true
-          ret = :timeout
         end
       end
       if !timeout_flg && !@queue.empty?
@@ -68,6 +66,23 @@ class TimeoutQueue
     end # synchronize
     return ret
   end
+
+  def empty?
+    ret = true
+    @mon.synchronize do
+      ret = @queue.empty?
+    end
+    return ret
+  end
+
+  def get_messages
+    ret = nil
+    @mon.synchronize do
+      ret = @queue.dup
+    end
+    return ret
+  end
+
 end
 
 end