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
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))
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)