From: beatles Date: Mon, 31 Jul 2006 23:20:49 +0000 (+0000) Subject: Add a command, %%RATING, to show a ranking sorted by rates. X-Git-Tag: 20170902~376 X-Git-Url: http://git.sourceforge.jp/view?p=shogi-server%2Fshogi-server.git;a=commitdiff_plain;h=7320c608168dbb1a7ca46db18c790d364b02fd81 Add a command, %%RATING, to show a ranking sorted by rates. --- diff --git a/changelog b/changelog index 246d9c4..6077b64 100644 --- a/changelog +++ b/changelog @@ -1,3 +1,7 @@ +2006-08-01 Daigo Moriwaki + + * Add a command, %%RATING, to show a ranking sorted by rates. + 2006-07-31 Daigo Moriwaki * Add a simple rating system. diff --git a/shogi-server b/shogi-server index c4b8673..eed64c6 100755 --- a/shogi-server +++ b/shogi-server @@ -141,8 +141,24 @@ class League end hash end + + def rated_players + players = [] + @db.transaction(true) do + @db.roots.each do |id| + players << id + end + end + return players.collect do |id| + p = RatedPlayer.new(id, nil, nil) + self.load(p) + p + end + end end +class RatedPlayer < Struct.new(:id, :name, :rate); end + class Player def initialize(str, socket) @name = nil @@ -326,6 +342,11 @@ class Player end when /^%%HELP/ write_help + when /^%%RATING/ + players = LEAGUE.rated_players + players.sort {|a,b| b.rate <=> a.rate}.each do |p| + write_safe("%s (%s) \t %4d\n" % [p.name, p.id, p.rate]) + end when /^%%GAME\s*$/ if ((@status == "connected") || (@status == "game_waiting")) @status = "connected"