0

私はJavaベースのBukkitプラグイン(目前の問題とはかなり無関係ですが注目に値します)を持っています。このプラグインは、30分ごとにWeb APIにクエリを実行して、ユーザーに渡す更新を求めます。

これが既存のメソッドで、すべてのユーザーをAPIに渡すために正常に機能します。

public ApiMessenger()
{        
    TASK_ID = Bukkit.getScheduler().scheduleAsyncRepeatingTask(plugin,new Runnable()
    {
        @Override
        public void run()
        {
            if(Bukkit.getOnlinePlayers().length > 0)
            {
                ApiMessenger.fetchPlayerItems(Bukkit.getOnlinePlayers(),true);
            }
        }
    }, 20*60*30, 20*60*30);
}

ただし、APIは一度に最大30人のユーザーを受け入れます。

したがって、一度に30人を超えるユーザーがいるこのプラグインを使用しているサーバーは、残りのユーザーが無視されるため、一度にすべてのユーザーを送信することはできません。

私が理解しようとしているのは、上記のApiMessengerメソッドが送信されたユーザーを記憶し、送信されたユーザーを送信しようとするために、どのような設定ですべてのユーザーを何らかのタイムスタンプで保存できるかということです。最初に更新を最も長く待機します。

ユーザーが参加/離脱するときにユーザーの削除/追加を管理できますが、私の主な関心事は、最初に、30人のユーザーのグループが送信されるときに更新できる並べ替えられたデータ構造を作成することです。

残念ながら、昇順で繰り返すことができるような構造を作成するためにJavaのどのデータ型を使用するかはわかりません。

4

1 に答える 1

1

キューの使用を検討しましたか?ここでJavaでそれを読むことができます。プレーヤーがログオンしたら、処理するプレーヤーのキューにプレーヤーを追加するだけです。次に、リストから30個のアイテムをポップして、処理します。次に、これらのユーザーをキューの最後にプッシュするだけです。プレーヤーがログオフした場合は、キューから削除するか、キューの処理時にオンラインであるかどうかを確認できます。私が正しく理解していれば、これで問題を解決することができます。

于 2012-12-14T21:27:29.923 に答える