OSDN Git Service

* [mk_rate] Now duplicated inputs are checked and skipped.
[shogi-server/shogi-server.git] / shogi-server
index 750fa6a..3ac2605 100755 (executable)
@@ -1,4 +1,4 @@
-#! /usr/bin/env ruby
+#! /usr/bin/ruby1.9.1
 # $Id$
 #
 # Author:: NABEYA Kenichi, Daigo Moriwaki
@@ -6,7 +6,7 @@
 #
 #--
 # 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
@@ -143,9 +143,6 @@ LICENSE
 
 SEE ALSO
 
-RELEASE
-        #{ShogiServer::Release}
-
 REVISION
         #{ShogiServer::Revision}
 
@@ -415,11 +412,15 @@ def main
   log_message("server started [Revision: #{ShogiServer::Revision}]")
 
   server.start do |client|
+    begin
       # client.sync = true # this is already set in WEBrick 
       client.setsockopt(Socket::SOL_SOCKET, Socket::SO_KEEPALIVE, true)
         # Keepalive time can be set by /proc/sys/net/ipv4/tcp_keepalive_time
       player, login = login_loop(client) # loop
-      next unless player
+      unless player
+        log_error("Detected a timed out login attempt")
+        next
+      end
 
       log_message(sprintf("user %s login", player.name))
       login.process
@@ -430,12 +431,16 @@ def main
         if (player.game)
           player.game.kill(player)
         end
-        player.finish # socket has been closed
+        player.finish
         $league.delete(player)
         log_message(sprintf("user %s logout", player.name))
       ensure
         $mutex.unlock
       end
+      player.wait_write_thread_finish(1000) # milliseconds
+    rescue Exception => ex
+      log_error("server.start: #{ex.class}: #{ex.message}\n\t#{ex.backtrace[0]}")
+    end
   end
 end