From 4dd971be521320b2a4d474878fc4ecb8b4a71d86 Mon Sep 17 00:00:00 2001 From: "marcins78@gmail.com" Date: Wed, 18 Apr 2012 18:30:33 +0000 Subject: [PATCH] Fxing dead-locking problem. --- .../com/gempukku/lotro/AbstractServer.java | 4 +- .../com/gempukku/lotro/ServerCleaner.java | 3 +- .../com/gempukku/lotro/game/LotroServer.java | 47 ++++---- .../gempukku/lotro/server/ServerResource.java | 4 +- .../gempukku/lotro/server/TradeResource.java | 110 ------------------ .../lotro/server/provider/ServerProvider.java | 36 +++--- 6 files changed, 48 insertions(+), 156 deletions(-) delete mode 100644 gemp-lotr/gemp-lotr-web-server/src/main/java/com/gempukku/lotro/server/TradeResource.java diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/AbstractServer.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/AbstractServer.java index e9ce0e7db..bcb9f1e01 100644 --- a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/AbstractServer.java +++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/AbstractServer.java @@ -5,14 +5,14 @@ public abstract class AbstractServer { private boolean _started; - public final synchronized void startServer() { + public void startServer() { if (!_started) { _cleaningTask.addServer(this); _started = true; } } - public final synchronized void stopServer() { + public void stopServer() { if (_started) { _cleaningTask.removeServer(this); _started = false; diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/ServerCleaner.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/ServerCleaner.java index 14d04ace7..7775865df 100644 --- a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/ServerCleaner.java +++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/ServerCleaner.java @@ -9,6 +9,7 @@ public class ServerCleaner { private CleaningThread _thr; public synchronized void addServer(AbstractServer server) { + System.out.println("Adding server: " + server.getClass()); _servers.add(server); if (_thr == null) { _thr = new CleaningThread(); @@ -38,8 +39,8 @@ public class ServerCleaner { // We can't do much about it } } - Thread.sleep(1000); } + Thread.sleep(1000); } } catch (InterruptedException exp) { // Thread interrupted - get lost diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/game/LotroServer.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/game/LotroServer.java index 41c3a3641..0ea8c5636 100644 --- a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/game/LotroServer.java +++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/game/LotroServer.java @@ -51,31 +51,32 @@ public class LotroServer extends AbstractServer { final int[] cardCounts = new int[]{129, 365, 122, 122, 365, 128, 128, 365, 122, 52, 122, 266, 203, 203, 15, 207, 6, 157, 149, 40}; - Thread thr = new Thread( - new Runnable() { - public void run() { - for (int i = 0; i <= 19; i++) { - for (int j = 1; j <= cardCounts[i]; j++) { - String blueprintId = i + "_" + j; - try { - if (_lotroCardBlueprintLibrary.getBaseBlueprintId(blueprintId).equals(blueprintId)) { - LotroCardBlueprint cardBlueprint = _lotroCardBlueprintLibrary.getLotroCardBlueprint(blueprintId); - CardType cardType = cardBlueprint.getCardType(); - if (cardType == CardType.SITE || cardType == CardType.THE_ONE_RING) - _defaultCollection.addItem(blueprintId, 1); - else - _defaultCollection.addItem(blueprintId, 4); - } - } catch (IllegalArgumentException exp) { - - } - } - } - _collectionReadyLatch.countDown(); +// Thread thr = new Thread( +// new Runnable() { +// public void run() { + for (int i = 0; i <= 19; i++) { + System.out.println("Loading set " + i); + for (int j = 1; j <= cardCounts[i]; j++) { + String blueprintId = i + "_" + j; + try { + if (_lotroCardBlueprintLibrary.getBaseBlueprintId(blueprintId).equals(blueprintId)) { + LotroCardBlueprint cardBlueprint = _lotroCardBlueprintLibrary.getLotroCardBlueprint(blueprintId); + CardType cardType = cardBlueprint.getCardType(); + if (cardType == CardType.SITE || cardType == CardType.THE_ONE_RING) + _defaultCollection.addItem(blueprintId, 1); + else + _defaultCollection.addItem(blueprintId, 4); } + } catch (IllegalArgumentException exp) { + } - ); - thr.start(); + } + } + _collectionReadyLatch.countDown(); +// } +// } +// ); +// thr.start(); _gameRecorder = new GameRecorder(_gameHistoryDao); } diff --git a/gemp-lotr/gemp-lotr-web-server/src/main/java/com/gempukku/lotro/server/ServerResource.java b/gemp-lotr/gemp-lotr-web-server/src/main/java/com/gempukku/lotro/server/ServerResource.java index 09be4e85c..600083a74 100644 --- a/gemp-lotr/gemp-lotr-web-server/src/main/java/com/gempukku/lotro/server/ServerResource.java +++ b/gemp-lotr/gemp-lotr-web-server/src/main/java/com/gempukku/lotro/server/ServerResource.java @@ -196,8 +196,8 @@ public class ServerResource extends AbstractResource { } else { sb.append("You are not logged in, log in below or ."); sb.append("
Tables count: ").append(_hallServer.getTablesCount()).append(", players in hall: ").append(_chatServer.getChatRoom("Game Hall").getUsersInRoom().size()) - .append(", games played in last 24 hours: ").append(_gameHistoryDao.getGamesPlayedCountInLastMs(1000 * 60 * 60 * 24)) - .append(",
active players in last week: ").append(_gameHistoryDao.getActivePlayersInLastMs(1000 * 60 * 60 * 24 * 7)) + .append(", games played in last 24 hours: unknown")//.append(_gameHistoryDao.getGamesPlayedCountInLastMs(1000 * 60 * 60 * 24)) + .append(",
active players in last week: unknown")//.append(_gameHistoryDao.getActivePlayersInLastMs(1000 * 60 * 60 * 24 * 7)) .append("
"); sb.append(getLoginHTML()); } diff --git a/gemp-lotr/gemp-lotr-web-server/src/main/java/com/gempukku/lotro/server/TradeResource.java b/gemp-lotr/gemp-lotr-web-server/src/main/java/com/gempukku/lotro/server/TradeResource.java deleted file mode 100644 index 8417b9563..000000000 --- a/gemp-lotr/gemp-lotr-web-server/src/main/java/com/gempukku/lotro/server/TradeResource.java +++ /dev/null @@ -1,110 +0,0 @@ -package com.gempukku.lotro.server; - -import com.gempukku.lotro.game.CardCollection; -import com.gempukku.lotro.game.LotroCardBlueprintLibrary; -import com.gempukku.lotro.game.Player; -import com.gempukku.lotro.trade.TradeServer; -import com.gempukku.lotro.trade.TradeState; -import com.gempukku.lotro.trade.TradeStateVisitor; -import com.sun.jersey.spi.resource.Singleton; -import org.w3c.dom.Document; -import org.w3c.dom.Element; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.ws.rs.GET; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; -import javax.ws.rs.QueryParam; -import javax.ws.rs.core.Context; -import javax.ws.rs.core.MediaType; -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.ParserConfigurationException; -import java.util.Map; - -@Singleton -@Path("/trade") -public class TradeResource extends AbstractResource { - @Context - private TradeServer _tradeServer; - @Context - private LotroCardBlueprintLibrary _library; - - @GET - @Produces(MediaType.APPLICATION_XML) - public Document getOngoingTrade(@QueryParam("participantId") String participantId, - @Context HttpServletRequest request, - @Context HttpServletResponse response) throws ParserConfigurationException { - Player resourceOwner = getResourceOwnerSafely(request, participantId); - - DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance(); - DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder(); - - Document doc = documentBuilder.newDocument(); - - Element trade = doc.createElement("trade"); - - final TradeState ongoingTrade = _tradeServer.getOngoingTrade(resourceOwner); - - if (ongoingTrade != null) - ongoingTrade.processTradeStateVisitor(resourceOwner.getName(), new OngoingTradeVisitor(doc, trade)); - - doc.appendChild(trade); - - processDeliveryServiceNotification(request, response); - - return doc; - } - - - private class OngoingTradeVisitor implements TradeStateVisitor { - private Document _doc; - private Element _root; - - private OngoingTradeVisitor(Document doc, Element root) { - _doc = doc; - _root = root; - } - - @Override - public void processTradeState(String otherParty, CardCollection offering, CardCollection getting, boolean selfAccepted, boolean otherAccepted, int tradeState, boolean selfConfirmed, boolean otherConfirmed) { - _root.setAttribute("otherParty", otherParty); - if (selfAccepted) - _root.setAttribute("selfAccepted", "true"); - if (otherAccepted) - _root.setAttribute("otherAccepted", "true"); - if (selfAccepted && otherAccepted) - _root.setAttribute("tradeState", String.valueOf(tradeState)); - if (selfConfirmed) - _root.setAttribute("selfConfirmed", "true"); - if (otherConfirmed) - _root.setAttribute("otherConfirmed", "true"); - - final Element offer = _doc.createElement("offer"); - appendItems(_doc, offer, offering); - _root.appendChild(offer); - Element get = _doc.createElement("get"); - appendItems(_doc, get, getting); - _root.appendChild(get); - } - - private void appendItems(Document doc, Element elem, CardCollection collection) { - final Map items = collection.getAll(); - for (Map.Entry itemCount : items.entrySet()) { - String blueprintId = itemCount.getKey(); - if (blueprintId.contains("_")) { - Element card = doc.createElement("card"); - card.setAttribute("count", String.valueOf(itemCount.getValue())); - card.setAttribute("blueprintId", blueprintId); - elem.appendChild(card); - } else { - Element pack = doc.createElement("pack"); - pack.setAttribute("count", String.valueOf(itemCount.getValue())); - pack.setAttribute("blueprintId", blueprintId); - elem.appendChild(pack); - } - } - } - } -} diff --git a/gemp-lotr/gemp-lotr-web-server/src/main/java/com/gempukku/lotro/server/provider/ServerProvider.java b/gemp-lotr/gemp-lotr-web-server/src/main/java/com/gempukku/lotro/server/provider/ServerProvider.java index e63d5b2ae..7186844b3 100644 --- a/gemp-lotr/gemp-lotr-web-server/src/main/java/com/gempukku/lotro/server/provider/ServerProvider.java +++ b/gemp-lotr/gemp-lotr-web-server/src/main/java/com/gempukku/lotro/server/provider/ServerProvider.java @@ -10,7 +10,6 @@ import com.gempukku.lotro.game.formats.LotroFormatLibrary; import com.gempukku.lotro.hall.HallServer; import com.gempukku.lotro.league.LeagueService; import com.gempukku.lotro.merchant.MerchantService; -import com.gempukku.lotro.trade.TradeServer; import com.sun.jersey.core.spi.component.ComponentContext; import com.sun.jersey.core.spi.component.ComponentScope; import com.sun.jersey.spi.inject.Injectable; @@ -28,7 +27,7 @@ public class ServerProvider implements InjectableProvider { private Injectable _merchantServiceInjectable; private Injectable _hallServerInjectable; private Injectable _lotroServerInjectable; - private Injectable _tradeServerInjectable; + // private Injectable _tradeServerInjectable; private Injectable _collectionsManagerInjectable; private Injectable _deliveryServiceInjectable; private Injectable _lotroFormatLibraryInjectable; @@ -66,8 +65,8 @@ public class ServerProvider implements InjectableProvider { return getLeagueServiceInjectable(); if (type.equals(CollectionsManager.class)) return getCollectionsManagerInjectable(); - if (type.equals(TradeServer.class)) - return getTradeServerInjectable(); +// if (type.equals(TradeServer.class)) +// return getTradeServerInjectable(); if (type.equals(DeliveryService.class)) return getDeliveryServiceInjectable(); if (type.equals(LotroFormatLibrary.class)) @@ -80,7 +79,7 @@ public class ServerProvider implements InjectableProvider { @PreDestroy public void destroyResources() { getHallServerInjectable().getValue().stopServer(); - getTradeServerInjectable().getValue().stopServer(); +// getTradeServerInjectable().getValue().stopServer(); getLotroServerInjectable().getValue().stopServer(); getChatServerInjectable().getValue().stopServer(); } @@ -152,20 +151,21 @@ public class ServerProvider implements InjectableProvider { return _hallServerInjectable; } - private synchronized Injectable getTradeServerInjectable() { - if (_tradeServerInjectable == null) { - final TradeServer tradeServer = new TradeServer(getChatServerInjectable().getValue()); - tradeServer.startServer(); - _tradeServerInjectable = new Injectable() { - @Override - public TradeServer getValue() { - return tradeServer; - } - }; - } - return _tradeServerInjectable; - } +// private synchronized Injectable getTradeServerInjectable() { +// if (_tradeServerInjectable == null) { +// final TradeServer tradeServer = new TradeServer(getChatServerInjectable().getValue()); +// tradeServer.startServer(); +// _tradeServerInjectable = new Injectable() { +// @Override +// public TradeServer getValue() { +// return tradeServer; +// } +// }; +// } +// return _tradeServerInjectable; +// } + // private synchronized Injectable getLotroServerInjectable() { if (_lotroServerInjectable == null) { final LotroServer lotroServer = new LotroServer(_deckDao, _gameHistoryDao, _library, getChatServerInjectable().getValue(), false);