## $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
#
class League
- def initialize
+ def initialize(dir=File.dirname(__FILE__))
@mutex = Monitor.new # guard @players
@games = Hash::new
@players = Hash::new
@event = nil
- @dir = File.dirname(__FILE__)
+ @dir = dir
end
attr_accessor :players, :games, :event, :dir
def rated_players
return @persistent.get_players
end
+
+ # Find a rival for a player.
+ # Return,
+ # 1. symbol :continue for an error case
+ # 2. a rival player instance found
+ # 3. nil if rival not found
+ #
+ def find_rival(player, game_name)
+ case player.sente
+ when nil # no preference
+ if Login.handicapped_game_name?(game_name)
+ player.write_safe("##[ERROR] Random turn preference is not allowed for handicapped games\n")
+ return :continue
+ end
+ return get_player("game_waiting", game_name, nil, player)
+ when true # rival must be gote
+ return get_player("game_waiting", game_name, false, player)
+ when false # rival must be sente
+ return get_player("game_waiting", game_name, true, player)
+ else
+ write_safe("##[ERROR] bad game option: %s\n" % [my_sente_string])
+ return :continue
+ end
+ end
+
end # class League
end # ShogiServer