diff --git a/Mage.Server/src/main/java/mage/server/MageServerImpl.java b/Mage.Server/src/main/java/mage/server/MageServerImpl.java index d574e09c7c0..c442d8e4ea5 100644 --- a/Mage.Server/src/main/java/mage/server/MageServerImpl.java +++ b/Mage.Server/src/main/java/mage/server/MageServerImpl.java @@ -263,11 +263,7 @@ public class MageServerImpl implements MageServer { @Override public List getConnectedPlayers(UUID roomId) throws MageException { try { - List players = new ArrayList(); - for (User user : UserManager.getInstance().getUsers()) { - players.add(user.getName()); - } - return players; + return GamesRoomManager.getInstance().getRoom(roomId).getPlayers(); } catch (Exception ex) { handleException(ex); diff --git a/Mage.Server/src/main/java/mage/server/game/GamesRoom.java b/Mage.Server/src/main/java/mage/server/game/GamesRoom.java index 0fd5255f702..0a273ae9474 100644 --- a/Mage.Server/src/main/java/mage/server/game/GamesRoom.java +++ b/Mage.Server/src/main/java/mage/server/game/GamesRoom.java @@ -47,6 +47,7 @@ public interface GamesRoom extends Room { public List getTables(); public List getFinished(); + public List getPlayers(); public boolean joinTable(UUID userId, UUID tableId, String name, String playerType, int skill, DeckCardLists deckList) throws MageException; public boolean joinTournamentTable(UUID userId, UUID tableId, String name, String playerType, int skill) throws GameException; public TableView createTable(UUID userId, MatchOptions options); diff --git a/Mage.Server/src/main/java/mage/server/game/GamesRoomImpl.java b/Mage.Server/src/main/java/mage/server/game/GamesRoomImpl.java index 7bb473776b6..0085e3479a0 100644 --- a/Mage.Server/src/main/java/mage/server/game/GamesRoomImpl.java +++ b/Mage.Server/src/main/java/mage/server/game/GamesRoomImpl.java @@ -33,7 +33,6 @@ import mage.server.RoomImpl; import mage.game.Table; import java.io.Serializable; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.Comparator; import java.util.List; @@ -48,10 +47,13 @@ import mage.game.GameException; import mage.game.match.MatchOptions; import mage.game.tournament.TournamentOptions; import mage.MageException; +import mage.server.User; +import mage.server.UserManager; import mage.view.MatchView; import mage.view.TableView; import org.apache.log4j.Logger; + /** * * @author BetaSteward_at_googlemail.com @@ -63,6 +65,7 @@ public class GamesRoomImpl extends RoomImpl implements GamesRoom, Serializable { private static ScheduledExecutorService updateExecutor = Executors.newSingleThreadScheduledExecutor(); private static List tableView = new ArrayList(); private static List matchView = new ArrayList(); + private static List playersView = new ArrayList(); private ConcurrentHashMap tables = new ConcurrentHashMap(); @@ -70,8 +73,7 @@ public class GamesRoomImpl extends RoomImpl implements GamesRoom, Serializable { updateExecutor.scheduleAtFixedRate(new Runnable() { @Override public void run() { - updateTables(); - updateFinished(); + update(); } }, 2, 2, TimeUnit.SECONDS); } @@ -81,13 +83,26 @@ public class GamesRoomImpl extends RoomImpl implements GamesRoom, Serializable { return tableView; } - private void updateTables() { + private void update() { ArrayList tableList = new ArrayList(); - for (Table table: tables.values()) { - if (table.getState() != TableState.FINISHED) + ArrayList matchList = new ArrayList(); + List t = new ArrayList
(tables.values()); + Collections.sort(t, new TimestampSorter()); + for (Table table: t) { + if (table.getState() != TableState.FINISHED) { tableList.add(new TableView(table)); + } + else if (matchList.size() < 50) { + matchList.add(new MatchView(table.getMatch())); + } } tableView = tableList; + matchView = matchList; + List players = new ArrayList(); + for (User user : UserManager.getInstance().getUsers()) { + players.add(user.getName()); + } + playersView = players; } @Override @@ -95,20 +110,6 @@ public class GamesRoomImpl extends RoomImpl implements GamesRoom, Serializable { return matchView; } - private void updateFinished() { - ArrayList matchList = new ArrayList(); - List
t = new ArrayList
(tables.values()); - Collections.sort(t, new TimestampSorter()); - for (Table table: t) { - if (table.getState() == TableState.FINISHED) { - matchList.add(new MatchView(table.getMatch())); - if (matchList.size() >= 50) - break; - } - } - matchView = matchList; - } - @Override public boolean joinTable(UUID userId, UUID tableId, String name, String playerType, int skill, DeckCardLists deckList) throws MageException { if (tables.containsKey(tableId)) { @@ -170,6 +171,11 @@ public class GamesRoomImpl extends RoomImpl implements GamesRoom, Serializable { return TableManager.getInstance().watchTable(userId, tableId); } + @Override + public List getPlayers() { + return playersView; + } + } class TimestampSorter implements Comparator
{ diff --git a/Mage.Server/src/main/java/mage/server/util/ServerMessagesUtil.java b/Mage.Server/src/main/java/mage/server/util/ServerMessagesUtil.java index c0703bf5871..ae35608e4ea 100644 --- a/Mage.Server/src/main/java/mage/server/util/ServerMessagesUtil.java +++ b/Mage.Server/src/main/java/mage/server/util/ServerMessagesUtil.java @@ -29,15 +29,15 @@ package mage.server.util; import org.apache.log4j.Logger; -import javax.swing.*; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import java.util.Scanner; +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.locks.ReadWriteLock; import java.util.concurrent.locks.ReentrantReadWriteLock; @@ -54,6 +54,7 @@ public class ServerMessagesUtil { private static final Logger log = Logger.getLogger(ServerMessagesUtil.class); private static final String SERVER_MSG_TXT_FILE = "server.msg.txt"; + private static ScheduledExecutorService updateExecutor; private List messages = new ArrayList(); private ReadWriteLock lock = new ReentrantReadWriteLock(); @@ -70,8 +71,13 @@ public class ServerMessagesUtil { } public ServerMessagesUtil() { - timer.setInitialDelay(5000); - timer.start(); + updateExecutor = Executors.newSingleThreadScheduledExecutor(); + updateExecutor.scheduleAtFixedRate(new Runnable() { + @Override + public void run() { + reloadMessages(); + } + }, 5, 5 * 60, TimeUnit.SECONDS); } public static ServerMessagesUtil getInstance() { @@ -167,11 +173,11 @@ public class ServerMessagesUtil { return statistics.toString(); } - private Timer timer = new Timer(1000 * 60, new ActionListener() { - public void actionPerformed(ActionEvent e) { - reloadMessages(); - } - }); +// private Timer timer = new Timer(1000 * 60, new ActionListener() { +// public void actionPerformed(ActionEvent e) { +// reloadMessages(); +// } +// }); public void setStartDate(long milliseconds) { this.startDate = milliseconds;