From 4a9efac4ad9f224a6d9c4841670bd15bc0489941 Mon Sep 17 00:00:00 2001 From: marcins78 Date: Wed, 2 Jan 2013 12:17:08 +0000 Subject: [PATCH] MOTD is sent to client, only if it has changed since last Hall update. --- .../com/gempukku/lotro/hall/HallChannelVisitor.java | 1 + .../gempukku/lotro/hall/HallCommunicationChannel.java | 11 +++++++++++ .../java/com/gempukku/lotro/hall/HallInfoVisitor.java | 2 ++ .../main/java/com/gempukku/lotro/hall/HallServer.java | 6 ++---- .../java/com/gempukku/lotro/server/HallResource.java | 11 +++++------ 5 files changed, 21 insertions(+), 10 deletions(-) diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/hall/HallChannelVisitor.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/hall/HallChannelVisitor.java index 22b78c42e..1d76f0c7d 100644 --- a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/hall/HallChannelVisitor.java +++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/hall/HallChannelVisitor.java @@ -4,6 +4,7 @@ import java.util.Map; public interface HallChannelVisitor { public void channelNumber(int channelNumber); + public void motdChanged(String motd); public void serverTime(String serverTime); public void runningPlayerGame(String gameId); diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/hall/HallCommunicationChannel.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/hall/HallCommunicationChannel.java index b63dc7dde..5ab6a3475 100644 --- a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/hall/HallCommunicationChannel.java +++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/hall/HallCommunicationChannel.java @@ -2,6 +2,7 @@ package com.gempukku.lotro.hall; import com.gempukku.lotro.game.Player; import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang.mutable.MutableObject; import java.util.HashMap; import java.util.List; @@ -10,6 +11,7 @@ import java.util.Map; public class HallCommunicationChannel { private int _channelNumber; private long _lastConsumed; + private String _lastMotd; private Map> _tournamentQueuePropsOnClient = new HashMap>(); private Map> _tablePropsOnClient = new HashMap>(); @@ -27,6 +29,7 @@ public class HallCommunicationChannel { public synchronized void processCommunicationChannel(HallServer hallServer, Player player, final HallChannelVisitor hallChannelVisitor) { hallChannelVisitor.channelNumber(_channelNumber); + final MutableObject newMotd = new MutableObject(); final Map> tournamentsOnServer = new HashMap>(); final Map> tablesOnServer = new HashMap>(); @@ -43,6 +46,11 @@ public class HallCommunicationChannel { hallChannelVisitor.playerBusy(busy); } + @Override + public void motd(String motd) { + newMotd.setValue(motd); + } + @Override public void visitTable(String tableId, String gameId, boolean watchable, TableStatus status, String statusDescription, String formatName, String tournamentName, List playerIds, String winner) { Map props = new HashMap(); @@ -116,6 +124,9 @@ public class HallCommunicationChannel { if (!_tablePropsOnClient.containsKey(tableOnServer.getKey())) hallChannelVisitor.addTable(tableOnServer.getKey(), tableOnServer.getValue()); + if (newMotd.getValue() != null && !newMotd.equals(_lastMotd)) + hallChannelVisitor.motdChanged((String) newMotd.getValue()); + _tablePropsOnClient = tablesOnServer; _lastConsumed = System.currentTimeMillis(); diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/hall/HallInfoVisitor.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/hall/HallInfoVisitor.java index ca7c1499c..368de1246 100644 --- a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/hall/HallInfoVisitor.java +++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/hall/HallInfoVisitor.java @@ -11,6 +11,8 @@ public interface HallInfoVisitor { public void playerBusy(boolean busy); + public void motd(String motd); + public void visitTable(String tableId, String gameId, boolean watchable, TableStatus status, String statusDescription, String formatName, String tournamentName, List playerIds, String winner); public void visitTournamentQueue(String tournamentQueueKey, int cost, String collectionName, String formatName, String tournamentQueueName, String tournamentPrizes, 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 5a7b9d4f4..5e864b0f2 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 @@ -97,10 +97,6 @@ public class HallServer extends AbstractServer { } } - public String getMOTD() { - return _motd; - } - public void setMOTD(String motd) { _motd = motd; } @@ -304,6 +300,8 @@ public class HallServer extends AbstractServer { try { visitor.serverTime(DateUtils.getStringDateWithHour()); visitor.playerBusy(isPlayerBusy(player.getName())); + if (_motd != null) + visitor.motd(_motd); // First waiting for (Map.Entry tableInformation : _awaitingTables.entrySet()) { diff --git a/gemp-lotr/gemp-lotr-web-server/src/main/java/com/gempukku/lotro/server/HallResource.java b/gemp-lotr/gemp-lotr-web-server/src/main/java/com/gempukku/lotro/server/HallResource.java index 7290798c3..c6bc8eee9 100644 --- a/gemp-lotr/gemp-lotr-web-server/src/main/java/com/gempukku/lotro/server/HallResource.java +++ b/gemp-lotr/gemp-lotr-web-server/src/main/java/com/gempukku/lotro/server/HallResource.java @@ -139,9 +139,6 @@ public class HallResource extends AbstractResource { Element hall = doc.createElement("hall"); hall.setAttribute("currency", String.valueOf(_collectionManager.getPlayerCollection(resourceOwner, "permanent").getCurrency())); - String motd = _hallServer.getMOTD(); - if (motd != null) - hall.setAttribute("motd", motd); _hallServer.processHall(resourceOwner, channelNumber, new SerializeHallInfoVisitor(doc, hall)); @@ -167,9 +164,6 @@ public class HallResource extends AbstractResource { Element hall = doc.createElement("hall"); hall.setAttribute("currency", String.valueOf(_collectionManager.getPlayerCollection(resourceOwner, "permanent").getCurrency())); - String motd = _hallServer.getMOTD(); - if (motd != null) - hall.setAttribute("motd", motd); _hallServer.signupUserForHall(resourceOwner, new SerializeHallInfoVisitor(doc, hall)); for (Map.Entry format : _formatLibrary.getHallFormats().entrySet()) { @@ -297,6 +291,11 @@ public class HallResource extends AbstractResource { _hall.setAttribute("serverTime", serverTime); } + @Override + public void motdChanged(String motd) { + _hall.setAttribute("motd", motd); + } + @Override public void addTournamentQueue(String queueId, Map props) { Element queue = _doc.createElement("queue");