+2016-11-26 Daigo Moriwaki <daigo at debian dot org>
+
+ * [shogi-server] Allow to customize maximum lenght of a login indentifier
+ (Closes #36821)
+ - The current maximum length of a login identifier is 32. Some
+ private uses require longer player names to distinguish each other
+ by specifying randomly generated tokens. It would of help to add a
+ new command line option --max-identifier to overwrite the default
+ maximum length.
+
2016-04-09 Daigo Moriwaki <daigo at debian dot org>
* utils/eval_graph.rb
Least time in second per move: 0, 1 (default 1).
- 0: The new rule that CSA introduced in November 2014.
- 1: The old rule before it.
+ --max-identifier n
+ maximum length of an identifier
--max-moves n
when a game with the n-th move played does not end, make the game a draw.
Default 256. 0 disables this feature.
["--daemon", GetoptLong::REQUIRED_ARGUMENT],
["--floodgate-games", GetoptLong::REQUIRED_ARGUMENT],
["--least-time-per-move", GetoptLong::REQUIRED_ARGUMENT],
+ ["--max-identifier", GetoptLong::REQUIRED_ARGUMENT],
["--max-moves", GetoptLong::REQUIRED_ARGUMENT],
["--pid-file", GetoptLong::REQUIRED_ARGUMENT],
["--player-log-dir", GetoptLong::REQUIRED_ARGUMENT])
$options["max-moves"] ||= ShogiServer::Default_Max_Moves
$options["max-moves"] = $options["max-moves"].to_i
+ $options["max-identifier"] ||= ShogiServer::Default_Max_Identifier_Length
+ $options["max-identifier"] = $options["max-identifier"].to_i
+
$options["least-time-per-move"] ||= ShogiServer::Default_Least_Time_Per_Move
$options["least-time-per-move"] = $options["least-time-per-move"].to_i
end
module ShogiServer # for a namespace
-Max_Identifier_Length = 32
+Default_Max_Identifier_Length = 32
Default_Timeout = 60 # for single socket operation
Default_Game_Name = "default-1500-0"
Default_Max_Moves = 256
Default_Least_Time_Per_Move = 0
One_Time = 10
Login_Time = 300 # time for LOGIN
-Revision = "20160409"
+Revision = "20161126"
RELOAD_FILES = ["shogi_server/league/floodgate.rb",
"shogi_server/league/persistent.rb",
end
def Login.good_identifier?(str)
- if str =~ /\A[\w@\-\.]{1,#{Max_Identifier_Length}}\z/
+ max = $options["max-identifier"]
+ if str =~ /\A[\w@\-\.]{1,#{max}}\z/
return true
else
return false
require 'shogi_server/game'
require 'shogi_server/player'
-$options = {}
+$options ||= {}
$options["least-time-per-move"] = 0
$options["max-moves"] = 256
require 'shogi_server/login'
require 'shogi_server/handicapped_boards'
+$options ||= {}
+
class ShogiServer::BasicPlayer
attr_accessor :protocol
end
@p_x1.name = "hoge"
@csa = ShogiServer::LoginCSA.new(@p_csa,"floodgate-900-0,xyz")
@x1 = ShogiServer::Loginx1.new(@p_x1, "xyz")
+
+ $options["max-identifier"] = ShogiServer::Default_Max_Identifier_Length
end
def test_player_id
assert(@p_x1.player_id == @p_csa.player_id)
end
+ def test_good_identifier
+ assert_true(ShogiServer::Login::good_identifier? "hoge")
+ assert_true(ShogiServer::Login::good_identifier? "12345678901234567890123456789012")
+
+ $options["max-identifier"] = 128
+ assert_true(ShogiServer::Login::good_identifier? "0"*128)
+ assert_false(ShogiServer::Login::good_identifier? "0"*129)
+ end
+
def test_login_factory_x1
player = ShogiServer::BasicPlayer.new
player.name = "hoge"
assert_equal("floodgate-900-0", login.gamename)
end
- def test_login_factory_csa_with_white
+ def test_login_factory_csa_with_white_fischer
player = ShogiServer::BasicPlayer.new
player.name = "hoge"
login = ShogiServer::Login::factory("LOGIN hoge floodgate-900-10F-W,xyz", player)