Synchronisation des méthodes du gestionnaire de file d'attente /staff + mise à jour automatique de la file d'attente /staff depuis la base de données

This commit is contained in:
Marc Baloup 2015-06-29 15:48:39 +02:00
parent b82b4a2e4b
commit c0dae89dbe

View File

@ -35,28 +35,20 @@ public class StaffQueueManager {
private Scoreboard scoreboardPlayerQueue = Bukkit.getScoreboardManager().getNewScoreboard();
public StaffQueueManager() {
try {
List<StaffTicketElement> elmts = ORM.getTable(StaffTicketTable.class).getAll(null, "creationTime ASC, id ASC", null, null);
plugin.getServer().getScheduler().runTaskTimerAsynchronously(plugin, new Runnable() {
for (StaffTicketElement el : elmts)
playerQueue.add(new WaitingPlayer(el));
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
updateScoreBoardWaitingList();
@Override
public void run() {
updateQueueFromDB();
}
}, 1, 30*20);
}
// le joueur ajouté doit-être en ligne
public void addWaitingPlayer(Player p, String m) {
public synchronized void addWaitingPlayer(Player p, String m) {
if (getWaitingPlayer(p) != null) return; // le joueur est déjà dans la file
playerQueue.add(new WaitingPlayer(p.getName(), m, p.getLocation()));
updateScoreBoardWaitingList();
@ -66,7 +58,7 @@ public class StaffQueueManager {
public WaitingPlayer getWaitingPlayer(String p) {
public synchronized WaitingPlayer getWaitingPlayer(String p) {
for (WaitingPlayer wp : playerQueue)
{
if (wp != null && wp.getPlayerName().equalsIgnoreCase(p))
@ -76,14 +68,14 @@ public class StaffQueueManager {
}
public WaitingPlayer getWaitingPlayer(OfflinePlayer p) {
public synchronized WaitingPlayer getWaitingPlayer(OfflinePlayer p) {
return getWaitingPlayer(p.getName());
}
public int getPlayerPosition(OfflinePlayer p) {
public synchronized int getPlayerPosition(OfflinePlayer p) {
int i = 0;
for (WaitingPlayer wp : playerQueue)
{
@ -96,7 +88,7 @@ public class StaffQueueManager {
public void removePlayer(String p) {
public synchronized void removePlayer(String p) {
WaitingPlayer wp = getWaitingPlayer(p);
if (wp != null)
{
@ -105,7 +97,7 @@ public class StaffQueueManager {
updateScoreBoardWaitingList();
}
}
public void removePlayer(OfflinePlayer p) {
public synchronized void removePlayer(OfflinePlayer p) {
removePlayer(p.getName());
}
@ -113,7 +105,7 @@ public class StaffQueueManager {
public WaitingPlayer getSelectedWaitingPlayer(Player staffPlayer) {
public synchronized WaitingPlayer getSelectedWaitingPlayer(Player staffPlayer) {
String staffName = staffPlayer.getName();
for (WaitingPlayer wp : playerQueue)
{
@ -127,7 +119,7 @@ public class StaffQueueManager {
public void updateScoreBoardWaitingList() {
public synchronized void updateScoreBoardWaitingList() {
// contient les joueurs qui sont associés à un membre du staff
ArrayList<String> selectedPlayers = new ArrayList<String>();
@ -171,7 +163,7 @@ public class StaffQueueManager {
public void showWaintingList(CommandSender sender) {
public synchronized void showWaintingList(CommandSender sender) {
sender.sendMessage(ChatColor.BOLD+"--- File d'attente des joueurs pour le staff ---");
@ -198,7 +190,7 @@ public class StaffQueueManager {
public List<String> getWaitingPlayerNames() {
public synchronized List<String> getWaitingPlayerNames() {
List<String> l = new ArrayList<String>();
for (WaitingPlayer wp : playerQueue) {
@ -214,6 +206,22 @@ public class StaffQueueManager {
public synchronized void updateQueueFromDB() {
try {
List<StaffTicketElement> elmts = ORM.getTable(StaffTicketTable.class).getAll(null, "creationTime ASC, id ASC", null, null);
playerQueue.clear();
for (StaffTicketElement el : elmts)
playerQueue.add(new WaitingPlayer(el));
updateScoreBoardWaitingList();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@ -221,7 +229,14 @@ public class StaffQueueManager {
public void onPlayerJoin(PlayerJoinEvent event) {
public synchronized void onPlayerJoin(PlayerJoinEvent event) {
Player p = event.getPlayer();
if (OnlinePlayerManager.get(p).isInStaff())
p.setScoreboard(scoreboardPlayerQueue);
@ -232,7 +247,7 @@ public class StaffQueueManager {
}
public void onPlayerQuit(PlayerQuitEvent event) {
public synchronized void onPlayerQuit(PlayerQuitEvent event) {
// on vérifie si un membre du staff se déconnecte
for (WaitingPlayer wp : playerQueue) {