X-Git-Url: http://git.sourceforge.jp/view?p=shogi-server%2Fshogi-server.git;a=blobdiff_plain;f=shogi_server%2Flogin.rb;h=79e770e083c130cf83523a0d8a249b284fa26106;hp=086e14ff25f92e818100020c4d779540c09e72b1;hb=3da57bcb8a3fe0753846510d5fdddbe461f2906c;hpb=7a159148d7e44abf278bd723de3debce74712959 diff --git a/shogi_server/login.rb b/shogi_server/login.rb index 086e14f..79e770e 100644 --- a/shogi_server/login.rb +++ b/shogi_server/login.rb @@ -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 @@ -79,7 +79,7 @@ class Login end def Login.good_identifier?(str) - if str =~ /\A[\w\d_@\-\.]{1,#{Max_Identifier_Length}}\z/ + if str =~ /\A[\w@\-\.]{1,#{Max_Identifier_Length}}\z/ return true else return false @@ -127,14 +127,40 @@ end class LoginCSA < Login PROTOCOL = "CSA" + attr_reader :gamename + + # A turn preference string: "+", "-" or default "*" + attr_reader :turn_preference + def initialize(player, password) @gamename = nil + @turn_preference = "*" super @player.protocol = PROTOCOL end + # Parse a gamename str and see if it includes an optional turn + # preference. + # ex. foo-1500-0-B for black + # ex. foo-1500-0-W for white + # + # Return an array of a valid gamename without an turn preference and a + # turn character "+" or "-"; false otherwise + # + def parse_gamename_turn(str) + if str =~ /^(.+)-\d+-\d+-(\w)$/ + case $2 + when "b","B" + return [str[0, str.length-2], "+"] + when "w","W" + return [str[0, str.length-2], "-"] + end + end + return false + end + def parse_password(password) - if Login.good_game_name?(password) + if Login.good_game_name?(password) || parse_gamename_turn(password) @gamename = password @player.set_password(nil) elsif password.split(",").size > 1 @@ -144,12 +170,17 @@ class LoginCSA < Login @player.set_password(password) @gamename = Default_Game_Name end - @gamename = self.class.good_game_name?(@gamename) ? @gamename : Default_Game_Name + array = parse_gamename_turn(@gamename) + if array + @gamename = array.first + @turn_preference = array.last + end + @gamename = Login.good_game_name?(@gamename) ? @gamename : Default_Game_Name end def process super - @csa_1st_str = "%%GAME #{@gamename} *" + @csa_1st_str = "%%GAME #{@gamename} #{@turn_preference}" end end