diff --git a/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/HallRequestHandler.java b/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/HallRequestHandler.java index adf217c6e..804e01a81 100644 --- a/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/HallRequestHandler.java +++ b/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/HallRequestHandler.java @@ -54,27 +54,27 @@ public class HallRequestHandler extends LotroServerRequestHandler implements Uri @Override public void handleRequest(String uri, HttpRequest request, Map context, ResponseWriter responseWriter, String remoteIp) throws Exception { - if (uri.equals("") && request.getMethod() == HttpMethod.GET) { + if (uri.equals("") && request.method() == HttpMethod.GET) { getHall(request, responseWriter); - } else if (uri.equals("") && request.getMethod() == HttpMethod.POST) { + } else if (uri.equals("") && request.method() == HttpMethod.POST) { createTable(request, responseWriter); - } else if (uri.equals("/update") && request.getMethod() == HttpMethod.POST) { + } else if (uri.equals("/update") && request.method() == HttpMethod.POST) { updateHall(request, responseWriter); - } else if (uri.equals("/formats/html") && request.getMethod() == HttpMethod.GET) { + } else if (uri.equals("/formats/html") && request.method() == HttpMethod.GET) { getFormats(request, responseWriter); - } else if (uri.startsWith("/format/") && request.getMethod() == HttpMethod.GET) { + } else if (uri.startsWith("/format/") && request.method() == HttpMethod.GET) { getFormat(request, uri.substring(8), responseWriter); - } else if (uri.startsWith("/queue/") && request.getMethod() == HttpMethod.POST) { + } else if (uri.startsWith("/queue/") && request.method() == HttpMethod.POST) { if (uri.endsWith("/leave")) { leaveQueue(request, uri.substring(7, uri.length() - 6), responseWriter); } else { joinQueue(request, uri.substring(7), responseWriter); } - } else if (uri.startsWith("/tournament/") && uri.endsWith("/leave") && request.getMethod() == HttpMethod.POST) { + } else if (uri.startsWith("/tournament/") && uri.endsWith("/leave") && request.method() == HttpMethod.POST) { dropFromTournament(request, uri.substring(12, uri.length() - 6), responseWriter); - } else if (uri.startsWith("/") && uri.endsWith("/leave") && request.getMethod() == HttpMethod.POST) { + } else if (uri.startsWith("/") && uri.endsWith("/leave") && request.method() == HttpMethod.POST) { leaveTable(request, uri.substring(1, uri.length() - 6), responseWriter); - } else if (uri.startsWith("/") && request.getMethod() == HttpMethod.POST) { + } else if (uri.startsWith("/") && request.method() == HttpMethod.POST) { joinTable(request, uri.substring(1), responseWriter); } else { responseWriter.writeError(404); @@ -93,6 +93,15 @@ public class HallRequestHandler extends LotroServerRequestHandler implements Uri _hallServer.joinTableAsPlayer(tableId, resourceOwner, deckName); responseWriter.writeXmlResponse(null); } catch (HallException e) { + try { + //Try again assuming it's a new player using the default deck library decks + Player libraryOwner = _playerDao.getPlayer("Librarian"); + _hallServer.joinTableAsPlayerWithSpoofedDeck(tableId, resourceOwner, libraryOwner, deckName); + responseWriter.writeXmlResponse(null); + return; + } catch (HallException ex) { + + } responseWriter.writeXmlResponse(marshalException(e)); } } finally { @@ -127,6 +136,16 @@ public class HallRequestHandler extends LotroServerRequestHandler implements Uri _hallServer.createNewTable(format, resourceOwner, deckName, timer); responseWriter.writeXmlResponse(null); } catch (HallException e) { + try + { + //try again assuming it's a new player with one of the default library decks selected + Player librarian = _playerDao.getPlayer("Librarian"); + _hallServer.spoofNewTable(format, resourceOwner, librarian, deckName, timer); + responseWriter.writeXmlResponse(null); + } catch (HallException ex) { + + } + responseWriter.writeXmlResponse(marshalException(e)); } } finally { diff --git a/gemp-lotr/gemp-lotr-async/src/main/web/js/gemp-022/hallUi.js b/gemp-lotr/gemp-lotr-async/src/main/web/js/gemp-022/hallUi.js index e89a584fa..ef519069a 100644 --- a/gemp-lotr/gemp-lotr-async/src/main/web/js/gemp-022/hallUi.js +++ b/gemp-lotr/gemp-lotr-async/src/main/web/js/gemp-022/hallUi.js @@ -313,10 +313,8 @@ var GempLotrHallUI = Class.extend({ updateHall:function () { var that = this; - console.log("updating"); this.comm.updateHall( function (xml) { - console.log("calling process"); that.processHall(xml); }, this.hallChannelId, this.hallErrorMap()); }, @@ -444,8 +442,6 @@ var GempLotrHallUI = Class.extend({ processHall:function (xml) { var that = this; - console.log("processing"); - var root = xml.documentElement; if (root.tagName == "hall") { this.hallChannelId = root.getAttribute("channelNumber"); @@ -756,7 +752,6 @@ var GempLotrHallUI = Class.extend({ // this.createTableButton.prop("disabled", false); setTimeout(function () { - console.log("set timeout"); that.updateHall(); }, 100); } diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/hall/HallServer.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/hall/HallServer.java index 926475672..7a0e67422 100644 --- a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/hall/HallServer.java +++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/hall/HallServer.java @@ -339,6 +339,26 @@ public class HallServer extends AbstractServer { } } + public void spoofNewTable(String type, Player player, Player librarian, String deckName, String timer) throws HallException { + if (_shutdown) + throw new HallException("Server is in shutdown mode. Server will be restarted after all running games are finished."); + + GameSettings gameSettings = createGameSettings(type, timer); + + LotroDeck lotroDeck = validateUserAndDeck(gameSettings.getLotroFormat(), librarian, deckName, gameSettings.getCollectionType()); + + _hallDataAccessLock.writeLock().lock(); + try { + final GameTable table = tableHolder.createTable(player, gameSettings, lotroDeck); + if (table != null) + createGameFromTable(table); + + hallChanged(); + } finally { + _hallDataAccessLock.writeLock().unlock(); + } + } + private GameSettings createGameSettings(String type, String timer) throws HallException { League league = null; LeagueSerieData leagueSerie = null; @@ -431,6 +451,27 @@ public class HallServer extends AbstractServer { } } + public boolean joinTableAsPlayerWithSpoofedDeck(String tableId, Player player, Player librarian, String deckName) throws HallException { + if (_shutdown) + throw new HallException("Server is in shutdown mode. Server will be restarted after all running games are finished."); + + GameSettings gameSettings = tableHolder.getGameSettings(tableId); + LotroDeck lotroDeck = validateUserAndDeck(gameSettings.getLotroFormat(), librarian, deckName, gameSettings.getCollectionType()); + + _hallDataAccessLock.writeLock().lock(); + try { + final GameTable runningTable = tableHolder.joinTable(tableId, player, lotroDeck); + if (runningTable != null) + createGameFromTable(runningTable); + + hallChanged(); + + return true; + } finally { + _hallDataAccessLock.writeLock().unlock(); + } + } + public void leaveQueue(String queueId, Player player) { _hallDataAccessLock.writeLock().lock(); try {