From c0e90b9d35ad41954dce795756688c4b5bde1467 Mon Sep 17 00:00:00 2001 From: betasteward Date: Thu, 3 Sep 2015 16:05:53 -0400 Subject: [PATCH] added getCards method - fixes update database issue --- .../src/main/java/mage/client/MageFrame.java | 2 +- .../main/java/org/mage/network/Client.java | 11 ++++++++- .../handlers/client/ClientMessageHandler.java | 7 ++++++ .../mage/network/interfaces/MageServer.java | 1 + .../messages/requests/GetCardsRequest.java | 19 +++++++++++++++ .../messages/responses/GetCardsResponse.java | 24 +++++++++++++++++++ .../src/main/java/mage/server/ServerMain.java | 5 ++++ .../mage/cards/repository/CardRepository.java | 1 + 8 files changed, 68 insertions(+), 2 deletions(-) create mode 100644 Mage.Network/src/main/java/org/mage/network/messages/requests/GetCardsRequest.java create mode 100644 Mage.Network/src/main/java/org/mage/network/messages/responses/GetCardsResponse.java diff --git a/Mage.Client/src/main/java/mage/client/MageFrame.java b/Mage.Client/src/main/java/mage/client/MageFrame.java index 21bcca05f1e..2a676f5d703 100644 --- a/Mage.Client/src/main/java/mage/client/MageFrame.java +++ b/Mage.Client/src/main/java/mage/client/MageFrame.java @@ -776,7 +776,7 @@ public class MageFrame extends javax.swing.JFrame implements MageClient { private void updateDatabase(boolean forceDBComparison, ServerState serverState) { long cardDBVersion = CardRepository.instance.getContentVersionFromDB(); if (forceDBComparison || serverState.getCardsContentVersion() > cardDBVersion) { - List classNames = CardRepository.instance.getClassNames(); + List classNames = client.getCards(); //CardRepository.instance.getClassNames(); List cards = CardRepository.instance.getMissingCards(classNames); CardRepository.instance.addCards(cards); CardRepository.instance.setContentVersion(serverState.getCardsContentVersion()); diff --git a/Mage.Network/src/main/java/org/mage/network/Client.java b/Mage.Network/src/main/java/org/mage/network/Client.java index b62f99cdb62..42f93635f7c 100644 --- a/Mage.Network/src/main/java/org/mage/network/Client.java +++ b/Mage.Network/src/main/java/org/mage/network/Client.java @@ -112,7 +112,7 @@ public class Client { } return false; } - + private class ClientInitializer extends ChannelInitializer { @Override @@ -196,6 +196,15 @@ public class Client { return client.getServerState(); } + public List getCards() { + try { + return clientMessageHandler.getCards(); + } catch (Exception ex) { + logger.error("Error getting cards", ex); + } + return null; + } + public boolean submitDeck(UUID tableId, DeckCardLists deckCardLists) { try { return clientMessageHandler.submitDeck(tableId, deckCardLists); diff --git a/Mage.Network/src/main/java/org/mage/network/handlers/client/ClientMessageHandler.java b/Mage.Network/src/main/java/org/mage/network/handlers/client/ClientMessageHandler.java index 5b5e335b61f..90897f784d4 100644 --- a/Mage.Network/src/main/java/org/mage/network/handlers/client/ClientMessageHandler.java +++ b/Mage.Network/src/main/java/org/mage/network/handlers/client/ClientMessageHandler.java @@ -26,6 +26,7 @@ import org.mage.network.messages.requests.ChatRoomIdRequest; import org.mage.network.messages.requests.CheatRequest; import org.mage.network.messages.requests.CreateTableRequest; import org.mage.network.messages.requests.CreateTournamentRequest; +import org.mage.network.messages.requests.GetCardsRequest; import org.mage.network.messages.requests.GetRoomRequest; import org.mage.network.messages.requests.GetTournamentChatIdRequest; import org.mage.network.messages.requests.GetTournamentRequest; @@ -99,6 +100,12 @@ public class ClientMessageHandler extends SimpleChannelInboundHandler getCards() throws Exception { + stringListQueue.clear(); + ctx.writeAndFlush(new GetCardsRequest()).addListener(WriteListener.getInstance()); + return stringListQueue.take(); + } + public UUID getChatRoomId(UUID roomId) throws Exception { uuidQueue.clear(); ctx.writeAndFlush(new ChatRoomIdRequest(roomId)).addListener(WriteListener.getInstance()); diff --git a/Mage.Network/src/main/java/org/mage/network/interfaces/MageServer.java b/Mage.Network/src/main/java/org/mage/network/interfaces/MageServer.java index 6b079642fc0..ea84959fda8 100644 --- a/Mage.Network/src/main/java/org/mage/network/interfaces/MageServer.java +++ b/Mage.Network/src/main/java/org/mage/network/interfaces/MageServer.java @@ -39,6 +39,7 @@ public interface MageServer { ServerState getServerState(); List getServerMessages(); + List getCards(); RoomView getRoom(UUID roomId); TableView createTable(String sessionId, UUID roomId, MatchOptions options); boolean joinTable(String sessionId, UUID roomId, UUID tableId, String name, String playerType, int skill, DeckCardLists deckList, String password); diff --git a/Mage.Network/src/main/java/org/mage/network/messages/requests/GetCardsRequest.java b/Mage.Network/src/main/java/org/mage/network/messages/requests/GetCardsRequest.java new file mode 100644 index 00000000000..8bfe7fe43ca --- /dev/null +++ b/Mage.Network/src/main/java/org/mage/network/messages/requests/GetCardsRequest.java @@ -0,0 +1,19 @@ +package org.mage.network.messages.requests; + +import io.netty.channel.ChannelHandlerContext; +import org.mage.network.handlers.WriteListener; +import org.mage.network.interfaces.MageServer; +import org.mage.network.messages.responses.GetCardsResponse; + +/** + * + * @author BetaSteward + */ +public class GetCardsRequest extends ServerRequest { + + @Override + public void handleMessage(MageServer server, ChannelHandlerContext ctx) { + ctx.writeAndFlush(new GetCardsResponse(server.getCards())).addListener(WriteListener.getInstance()); + } + +} diff --git a/Mage.Network/src/main/java/org/mage/network/messages/responses/GetCardsResponse.java b/Mage.Network/src/main/java/org/mage/network/messages/responses/GetCardsResponse.java new file mode 100644 index 00000000000..7152ccce87b --- /dev/null +++ b/Mage.Network/src/main/java/org/mage/network/messages/responses/GetCardsResponse.java @@ -0,0 +1,24 @@ +package org.mage.network.messages.responses; + +import java.util.List; +import org.mage.network.handlers.client.ClientMessageHandler; +import org.mage.network.messages.ClientMessage; + +/** + * + * @author BetaSteward + */ +public class GetCardsResponse extends ClientMessage { + + private List cards; + + public GetCardsResponse(List cards) { + this.cards = cards; + } + + @Override + public void handleMessage(ClientMessageHandler handler) { + handler.receiveStringList(cards); + } + +} diff --git a/Mage.Server/src/main/java/mage/server/ServerMain.java b/Mage.Server/src/main/java/mage/server/ServerMain.java index c6505f6fb2e..c55ef761bcc 100644 --- a/Mage.Server/src/main/java/mage/server/ServerMain.java +++ b/Mage.Server/src/main/java/mage/server/ServerMain.java @@ -899,6 +899,11 @@ public class ServerMain implements MageServer { // } // + @Override + public List getCards() { + return CardRepository.instance.getClassNames(); + } + @Override public List getServerMessages() { return ServerMessagesUtil.getInstance().getMessages(); diff --git a/Mage/src/mage/cards/repository/CardRepository.java b/Mage/src/mage/cards/repository/CardRepository.java index 115c36f9285..de4ff55efde 100644 --- a/Mage/src/mage/cards/repository/CardRepository.java +++ b/Mage/src/mage/cards/repository/CardRepository.java @@ -282,6 +282,7 @@ public enum CardRepository { return null; } + //TODO: cache the results of this query public List getClassNames() { List names = new ArrayList<>(); try {