저는 Java 기반의 Bukkit 플러그인을 사용하고 있습니다 (30 분마다 사용자에게 전달할 업데이트를 웹 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 명의 사용자를 받아 들일 것입니다 그러나 다음은
는 API에 모든 사용자를 전달하는 잘 작동 기존의 방법입니다.
따라서 한 번에 30 명 이상의 사용자가있는이 플러그인을 사용하는 서버는 나머지 사용자는 무시되므로 한 번에 모든 사용자를 제출할 수 없습니다.
내가 알아 내려고하는 것은 어떤 종류의 설정으로 타임 스탬프 형식으로 모든 사용자를 저장할 수 있으므로 위의 ApiMessenger 메서드는 어떤 사용자가 전송되었는지 기억하고 가장 먼저 업데이트를 기다리는 사람들.
사용자가 가입/탈퇴 할 때 제거/추가를 관리 할 수 있지만 가장 큰 문제는 먼저 30 명의 사용자 그룹이 전송 될 때 업데이트 할 수있는 정렬 된 데이터 구조를 만드는 것입니다.
오케스트레이션 방식으로 반복 할 수있는 구조를 만드는 데 Java의 데이터 형식을 사용할지 알 수 없습니다.
이것은 매우 모호합니다. 코드를 작성하거나 요구 사항을보다 명확하게 논의해야한다고 생각합니다. "사용자가 마지막으로 쿼리 한 시간"은 아무나 다른 사람에게 아무런 의미가 없습니다. – thatidiotguy
이상적으로, 로그 오프 한 사용자는 로그 오프 할 때 제거해야하며 주기적으로 제거해야합니다. 그러나 귀하의 특정 요구 사항을 모르겠다 ... 목록을 정렬하는 대신 필요할 때 목록을 정렬하는 것이 좋습니다. – jmrodrigg
위의 두 가지 내용에 동의합니다. 이렇게하는 가장 좋은 방법은 일종의 리스너를 사용하여 제거 로그를 실행하고 해당 마스터 목록을 업데이트 한 다음 주기적 폴링을 마스터 목록에 대해 확인하는 것처럼 보입니다. – Charles