+2013-12-26 Daigo Moriwaki <daigo at debian dot org>
+
+ * [shogi-server]
+ - Previously, parameters in Floodgate time configuration file were
+ not applied to actual instances. This issue has been fixed.
+
2013-12-21 Daigo Moriwaki <daigo at debian dot org>
* [shogi-server]
#
attr_reader :next_time
attr_reader :league, :game_name
- attr_reader :pairing_factory
+ attr_reader :pairing_factory, :sacrifice
attr_reader :options
def initialize(league, hash={})
@league = league
- @next_time = hash[:next_time] || nil
- @game_name = hash[:game_name] || "floodgate-900-0"
- @pairing_factory = "default_factory" # will be updated by NextTimeGenerator
- # Options will be updated by NextTimeGenerator
- @options = {:sacrifice => "gps500+e293220e3f8a3e59f79f6b0efffaa931"}
+ @next_time = hash[:next_time] || nil
+ @game_name = hash[:game_name] || "floodgate-900-0"
+ @pairing_factory = hash[:pairing_factory] || "default_factory" # will be updated by NextTimeGenerator
+ @sacrifice = hash[:sacrifice] || "gps500+e293220e3f8a3e59f79f6b0efffaa931"
+ # @options is passed to a pairing factory
+ @options = {:sacrifice => @sacrifice}
charge if @next_time.nil?
end
floodgate.match_game
end
- # Regenerate floodgate instances from next_array for the next matches.
- # @param next_array array of [game_name, next_time]
+ # Regenerate floodgate instances from next_instances for the next matches.
+ # @param next_instances array of [game_name, next_time]
#
- def regenerate_leagues(next_array)
- leagues = next_array.collect do |game_name, next_time|
- log_message("Regenerating a floodgate league...: %s %s" % [game_name, next_time])
+ def regenerate_leagues(next_instances)
+ leagues = next_instances.collect do |prev|
+ log_message("Regenerating a floodgate league...: %s %s %s" %
+ [prev.game_name, prev.next_time, prev.sacrifice])
floodgate = ShogiServer::League::Floodgate.new($league,
- {:game_name => game_name,
- :next_time => next_time})
+ {:game_name => prev.game_name, :next_time => prev.next_time,
+ :pairing_factory => prev.pairing_factory, :sacrifice => prev.sacrifice})
end
floodgate_reload_log(leagues)
return leagues
floodgate = next_league(leagues)
next if wait_next_floodgate(floodgate)
- next_array = leagues.collect do |floodgate|
- if (floodgate.next_time - Time.now) > 0
- [floodgate.game_name, floodgate.next_time]
- else
+ next_instances = leagues.collect do |floodgate|
+ unless (floodgate.next_time - Time.now) > 0
start_games(floodgate)
floodgate.charge # updates next_time
- [floodgate.game_name, floodgate.next_time]
end
+ floodgate
end
reload_shogi_server
# Regenerate floodgate instances after ShogiServer.realod
- leagues = regenerate_leagues(next_array)
+ leagues = regenerate_leagues(next_instances)
rescue Exception => ex
# ignore errors
log_error("[in Floodgate's thread] #{ex} #{ex.backtrace}")
def test_regenerate_leagues
game_names = %w(floodgate-900-0 floodgate-3600-0)
now = Time.now
- next_array = [["floodgate-900-0", now+100], ["floodgate-3600-0", now+200]]
+ next_array = []
+ next_array << ShogiServer::League::Floodgate.new($league,
+ {:game_name => "floodgate-900-0",
+ :next_time => (now+100)})
+ next_array << ShogiServer::League::Floodgate.new($league,
+ {:game_name => "floodgate-3600-0",
+ :next_time => (now+200)})
objs = @sf.regenerate_leagues(next_array)
assert_equal 2, objs.size
assert_instance_of ShogiServer::League::Floodgate, objs[0]