---
.../freecol/server/control/InGameInputHandler.java | 396 +++++++++++----------
.../server/control/PreGameInputHandler.java | 59 +--
.../freecol/server/control/ServerInputHandler.java | 107 +++---
.../server/control/UserConnectionHandler.java | 28 +-
4 files changed, 298 insertions(+), 292 deletions(-)
diff --git a/src/net/sf/freecol/server/control/InGameInputHandler.java
b/src/net/sf/freecol/server/control/InGameInputHandler.java
index 7033e6950ec..50c6065c20b 100644
--- a/src/net/sf/freecol/server/control/InGameInputHandler.java
+++ b/src/net/sf/freecol/server/control/InGameInputHandler.java
@@ -19,6 +19,8 @@
package net.sf.freecol.server.control;
+import java.net.UnknownServiceException;
+
import net.sf.freecol.common.networking.AbandonColonyMessage;
import net.sf.freecol.common.networking.AskSkillMessage;
import net.sf.freecol.common.networking.AssignTeacherMessage;
@@ -100,205 +102,209 @@ public final class InGameInputHandler extends
ServerInputHandler {
*
* Note: all the handler lamdbas call getGame() because the game
* is not necessarily available when the constructor is called.
- *
+ *
* @param freeColServer The main server object.
*/
public InGameInputHandler(final FreeColServer freeColServer) {
super(freeColServer);
+ }
+
+ @Override
+ public Element handleElement(Connection c, Element e)
+ throws UnknownServiceException {
+ String tag = e.getTagName().intern();
+ switch (tag) {
+ case AbandonColonyMessage.TAG:
+ return handler(true, c, new AbandonColonyMessage(getGame(),
e));
+
+ case AskSkillMessage.TAG:
+ return handler(true, c, new AskSkillMessage(getGame(), e));
+
+ case AssignTeacherMessage.TAG:
+ return handler(true, c, new AssignTeacherMessage(getGame(),
e));
+
+ case AssignTradeRouteMessage.TAG:
+ return handler(true, c, new AssignTradeRouteMessage(getGame(),
e));
+
+ case AttackMessage.TAG:
+ return handler(true, c, new AttackMessage(getGame(), e));
+
+ case BuildColonyMessage.TAG:
+ return handler(true, c, new BuildColonyMessage(getGame(), e));
+
+ case CashInTreasureTrainMessage.TAG:
+ return handler(true, c, new
CashInTreasureTrainMessage(getGame(), e));
+
+ case ChangeStateMessage.TAG:
+ return handler(true, c, new ChangeStateMessage(getGame(), e));
+
+ case ChangeWorkImprovementTypeMessage.TAG:
+ return handler(true, c, new
ChangeWorkImprovementTypeMessage(getGame(), e));
+
+ case ChangeWorkTypeMessage.TAG:
+ return handler(true, c, new ChangeWorkTypeMessage(getGame(),
e));
+
+ case ChooseFoundingFatherMessage.TAG:
+ return handler(true, c, new
ChooseFoundingFatherMessage(getGame(), e));
+
+ case ClaimLandMessage.TAG:
+ return handler(true, c, new ClaimLandMessage(getGame(), e));
+
+ case ClearSpecialityMessage.TAG:
+ return handler(true, c, new ClearSpecialityMessage(getGame(),
e));
+
+ case TrivialMessage.CONTINUE_TAG:
+ return handler(false, c, TrivialMessage.CONTINUE_MESSAGE);
+
+ case DeclareIndependenceMessage.TAG:
+ return handler(true, c, new
DeclareIndependenceMessage(getGame(), e));
+
+ case DeclineMoundsMessage.TAG:
+ return handler(true, c, new DeclineMoundsMessage(getGame(),
e));
+
+ case DeliverGiftMessage.TAG:
+ return handler(true, c, new DeliverGiftMessage(getGame(), e));
+
+ case DeleteTradeRouteMessage.TAG:
+ return handler(true, c, new DeleteTradeRouteMessage(getGame(),
e));
+
+ case DemandTributeMessage.TAG:
+ return handler(true, c, new DemandTributeMessage(getGame(),
e));
+
+ case DiplomacyMessage.TAG:
+ return handler(false, c, new DiplomacyMessage(getGame(), e));
+
+ case DisbandUnitMessage.TAG:
+ return handler(true, c, new DisbandUnitMessage(getGame(), e));
+
+ case DisembarkMessage.TAG:
+ return handler(true, c, new DisembarkMessage(getGame(), e));
+
+ case EmbarkMessage.TAG:
+ return handler(true, c, new EmbarkMessage(getGame(), e));
+
+ case EmigrateUnitMessage.TAG:
+ return handler(true, c, new EmigrateUnitMessage(getGame(), e));
+
+ case TrivialMessage.END_TURN_TAG:
+ return handler(true, c, TrivialMessage.END_TURN_MESSAGE);
+
+ case TrivialMessage.ENTER_REVENGE_MODE_TAG:
+ return handler(false, c,
TrivialMessage.ENTER_REVENGE_MODE_MESSAGE);
+
+ case EquipForRoleMessage.TAG:
+ return handler(true, c, new EquipForRoleMessage(getGame(), e));
+
+ case FirstContactMessage.TAG:
+ return handler(false, c, new FirstContactMessage(getGame(),
e));
+
+ case InciteMessage.TAG:
+ return handler(true, c, new InciteMessage(getGame(), e));
+
+ case IndianDemandMessage.TAG:
+ return handler(false, c, new IndianDemandMessage(getGame(),
e));
+
+ case HighScoreMessage.TAG:
+ return handler(false, c, new HighScoreMessage(getGame(), e));
+
+ case JoinColonyMessage.TAG:
+ return handler(true, c, new JoinColonyMessage(getGame(), e));
+
+ case LearnSkillMessage.TAG:
+ return handler(true, c, new LearnSkillMessage(getGame(), e));
+
+ case LoadGoodsMessage.TAG:
+ return handler(true, c, new LoadGoodsMessage(getGame(), e));
+
+ case LootCargoMessage.TAG:
+ return handler(false, c, new LootCargoMessage(getGame(), e));
+
+ case MissionaryMessage.TAG:
+ return handler(true, c, new MissionaryMessage(getGame(), e));
+
+ case MonarchActionMessage.TAG:
+ return handler(true, c, new MonarchActionMessage(getGame(),
e));
+
+ case MoveMessage.TAG:
+ return handler(true, c, new MoveMessage(getGame(), e));
+
+ case MoveToMessage.TAG:
+ return handler(true, c, new MoveToMessage(getGame(), e));
+
+ case NationSummaryMessage.TAG:
+ return handler(false, c, new NationSummaryMessage(getGame(),
e));
+
+ case NativeGiftMessage.TAG:
+ return handler(true, c, new NativeGiftMessage(getGame(), e));
+
+ case NativeTradeMessage.TAG:
+ return handler(false, c, new NativeTradeMessage(getGame(), e));
+
+ case NewLandNameMessage.TAG:
+ return handler(false, c, new NewLandNameMessage(getGame(), e));
+
+ case NewRegionNameMessage.TAG:
+ return handler(false, c, new NewRegionNameMessage(getGame(),
e));
+
+ case NewTradeRouteMessage.TAG:
+ return handler(true, c, new NewTradeRouteMessage(getGame(),
e));
+
+ case PayArrearsMessage.TAG:
+ return handler(true, c, new PayArrearsMessage(getGame(), e));
+
+ case PayForBuildingMessage.TAG:
+ return handler(true, c, new PayForBuildingMessage(getGame(),
e));
+
+ case PutOutsideColonyMessage.TAG:
+ return handler(true, c, new PutOutsideColonyMessage(getGame(),
e));
+
+ case RearrangeColonyMessage.TAG:
+ return handler(true, c, new RearrangeColonyMessage(getGame(),
e));
+
+ case RenameMessage.TAG:
+ return handler(true, c, new RenameMessage(getGame(), e));
+
+ case TrivialMessage.RETIRE_TAG:
+ return handler(false, c, TrivialMessage.RETIRE_MESSAGE);
+
+ case ScoutIndianSettlementMessage.TAG:
+ return handler(true, c, new
ScoutIndianSettlementMessage(getGame(), e));
+
+ case ScoutSpeakToChiefMessage.TAG:
+ return handler(true, c, new
ScoutSpeakToChiefMessage(getGame(), e));
+
+ case SetBuildQueueMessage.TAG:
+ return handler(true, c, new SetBuildQueueMessage(getGame(),
e));
+
+ case SetCurrentStopMessage.TAG:
+ return handler(false, c, new SetCurrentStopMessage(getGame(),
e));
+
+ case SetDestinationMessage.TAG:
+ return handler(false, c, new SetDestinationMessage(getGame(),
e));
+
+ case SetGoodsLevelsMessage.TAG:
+ return handler(true, c, new SetGoodsLevelsMessage(getGame(),
e));
+
+ case SpySettlementMessage.TAG:
+ return handler(false, c, new SpySettlementMessage(getGame(),
e));
+
+ case TrainUnitInEuropeMessage.TAG:
+ return handler(true, c, new
TrainUnitInEuropeMessage(getGame(), e));
+
+ case UnloadGoodsMessage.TAG:
+ return handler(true, c, new UnloadGoodsMessage(getGame(), e));
+
+ case UpdateTradeRouteMessage.TAG:
+ return handler(false, c, new
UpdateTradeRouteMessage(getGame(), e));
+
+ case WorkMessage.TAG:
+ return handler(true, c, new WorkMessage(getGame(), e));
+
+ case MultipleMessage.TAG:
+ return (new MultipleMessage(getGame(),
e).handle(getFreeColServer(), c));
- register(AbandonColonyMessage.TAG,
- (Connection conn, Element e) -> handler(true, conn,
- new AbandonColonyMessage(getGame(), e)));
- register(AskSkillMessage.TAG,
- (Connection conn, Element e) -> handler(true, conn,
- new AskSkillMessage(getGame(), e)));
- register(AssignTeacherMessage.TAG,
- (Connection conn, Element e) -> handler(true, conn,
- new AssignTeacherMessage(getGame(), e)));
- register(AssignTradeRouteMessage.TAG,
- (Connection conn, Element e) -> handler(true, conn,
- new AssignTradeRouteMessage(getGame(), e)));
- register(AttackMessage.TAG,
- (Connection conn, Element e) -> handler(true, conn,
- new AttackMessage(getGame(), e)));
- register(BuildColonyMessage.TAG,
- (Connection conn, Element e) -> handler(true, conn,
- new BuildColonyMessage(getGame(), e)));
- register(CashInTreasureTrainMessage.TAG,
- (Connection conn, Element e) -> handler(true, conn,
- new CashInTreasureTrainMessage(getGame(), e)));
- register(ChangeStateMessage.TAG,
- (Connection conn, Element e) -> handler(true, conn,
- new ChangeStateMessage(getGame(), e)));
- register(ChangeWorkImprovementTypeMessage.TAG,
- (Connection conn, Element e) -> handler(true, conn,
- new ChangeWorkImprovementTypeMessage(getGame(), e)));
- register(ChangeWorkTypeMessage.TAG,
- (Connection conn, Element e) -> handler(true, conn,
- new ChangeWorkTypeMessage(getGame(), e)));
- register(ChooseFoundingFatherMessage.TAG,
- (Connection conn, Element e) -> handler(true, conn,
- new ChooseFoundingFatherMessage(getGame(), e)));
- register(ClaimLandMessage.TAG,
- (Connection conn, Element e) -> handler(true, conn,
- new ClaimLandMessage(getGame(), e)));
- register(ClearSpecialityMessage.TAG,
- (Connection conn, Element e) -> handler(true, conn,
- new ClearSpecialityMessage(getGame(), e)));
- register(TrivialMessage.CONTINUE_TAG,
- (Connection conn, Element e) -> handler(false, conn,
- TrivialMessage.CONTINUE_MESSAGE));
- register(DeclareIndependenceMessage.TAG,
- (Connection conn, Element e) -> handler(true, conn,
- new DeclareIndependenceMessage(getGame(), e)));
- register(DeclineMoundsMessage.TAG,
- (Connection conn, Element e) -> handler(true, conn,
- new DeclineMoundsMessage(getGame(), e)));
- register(DeliverGiftMessage.TAG,
- (Connection conn, Element e) -> handler(true, conn,
- new DeliverGiftMessage(getGame(), e)));
- register(DeleteTradeRouteMessage.TAG,
- (Connection conn, Element e) -> handler(true, conn,
- new DeleteTradeRouteMessage(getGame(), e)));
- register(DemandTributeMessage.TAG,
- (Connection conn, Element e) -> handler(true, conn,
- new DemandTributeMessage(getGame(), e)));
- register(DiplomacyMessage.TAG,
- (Connection conn, Element e) -> handler(false, conn,
- new DiplomacyMessage(getGame(), e)));
- register(DisbandUnitMessage.TAG,
- (Connection conn, Element e) -> handler(true, conn,
- new DisbandUnitMessage(getGame(), e)));
- register(DisembarkMessage.TAG,
- (Connection conn, Element e) -> handler(true, conn,
- new DisembarkMessage(getGame(), e)));
- register(EmbarkMessage.TAG,
- (Connection conn, Element e) -> handler(true, conn,
- new EmbarkMessage(getGame(), e)));
- register(EmigrateUnitMessage.TAG,
- (Connection conn, Element e) -> handler(true, conn,
- new EmigrateUnitMessage(getGame(), e)));
- register(TrivialMessage.END_TURN_TAG,
- (Connection conn, Element e) -> handler(true, conn,
- TrivialMessage.END_TURN_MESSAGE));
- register(TrivialMessage.ENTER_REVENGE_MODE_TAG,
- (Connection conn, Element e) -> handler(false, conn,
- TrivialMessage.ENTER_REVENGE_MODE_MESSAGE));
- register(EquipForRoleMessage.TAG,
- (Connection conn, Element e) -> handler(true, conn,
- new EquipForRoleMessage(getGame(), e)));
- register(FirstContactMessage.TAG,
- (Connection conn, Element e) -> handler(false, conn,
- new FirstContactMessage(getGame(), e)));
- register(InciteMessage.TAG,
- (Connection conn, Element e) -> handler(true, conn,
- new InciteMessage(getGame(), e)));
- register(IndianDemandMessage.TAG,
- (Connection conn, Element e) -> handler(false, conn,
- new IndianDemandMessage(getGame(), e)));
- register(HighScoreMessage.TAG,
- (Connection conn, Element e) -> handler(false, conn,
- new HighScoreMessage(getGame(), e)));
- register(JoinColonyMessage.TAG,
- (Connection conn, Element e) -> handler(true, conn,
- new JoinColonyMessage(getGame(), e)));
- register(LearnSkillMessage.TAG,
- (Connection conn, Element e) -> handler(true, conn,
- new LearnSkillMessage(getGame(), e)));
- register(LoadGoodsMessage.TAG,
- (Connection conn, Element e) -> handler(true, conn,
- new LoadGoodsMessage(getGame(), e)));
- register(LootCargoMessage.TAG,
- (Connection conn, Element e) -> handler(false, conn,
- new LootCargoMessage(getGame(), e)));
- register(MissionaryMessage.TAG,
- (Connection conn, Element e) -> handler(true, conn,
- new MissionaryMessage(getGame(), e)));
- register(MonarchActionMessage.TAG,
- (Connection conn, Element e) -> handler(true, conn,
- new MonarchActionMessage(getGame(), e)));
- register(MoveMessage.TAG,
- (Connection conn, Element e) -> handler(true, conn,
- new MoveMessage(getGame(), e)));
- register(MoveToMessage.TAG,
- (Connection conn, Element e) -> handler(true, conn,
- new MoveToMessage(getGame(), e)));
- //register(MultipleMessage.TAG,
- // (Connection conn, Element e) -> handler(false, conn,
- // new MultipleMessage(getGame(), e)));
- register(NationSummaryMessage.TAG,
- (Connection conn, Element e) -> handler(false, conn,
- new NationSummaryMessage(getGame(), e)));
- register(NativeGiftMessage.TAG,
- (Connection conn, Element e) -> handler(true, conn,
- new NativeGiftMessage(getGame(), e)));
- register(NativeTradeMessage.TAG,
- (Connection conn, Element e) -> handler(false, conn,
- new NativeTradeMessage(getGame(), e)));
- register(NewLandNameMessage.TAG,
- (Connection conn, Element e) -> handler(false, conn,
- new NewLandNameMessage(getGame(), e)));
- register(NewRegionNameMessage.TAG,
- (Connection conn, Element e) -> handler(false, conn,
- new NewRegionNameMessage(getGame(), e)));
- register(NewTradeRouteMessage.TAG,
- (Connection conn, Element e) -> handler(true, conn,
- new NewTradeRouteMessage(getGame(), e)));
- register(PayArrearsMessage.TAG,
- (Connection conn, Element e) -> handler(true, conn,
- new PayArrearsMessage(getGame(), e)));
- register(PayForBuildingMessage.TAG,
- (Connection conn, Element e) -> handler(true, conn,
- new PayForBuildingMessage(getGame(), e)));
- register(PutOutsideColonyMessage.TAG,
- (Connection conn, Element e) -> handler(true, conn,
- new PutOutsideColonyMessage(getGame(), e)));
- register(RearrangeColonyMessage.TAG,
- (Connection conn, Element e) -> handler(true, conn,
- new RearrangeColonyMessage(getGame(), e)));
- register(RenameMessage.TAG,
- (Connection conn, Element e) -> handler(true, conn,
- new RenameMessage(getGame(), e)));
- register(TrivialMessage.RETIRE_TAG,
- (Connection conn, Element e) -> handler(false, conn,
- TrivialMessage.RETIRE_MESSAGE));
- register(ScoutIndianSettlementMessage.TAG,
- (Connection conn, Element e) -> handler(true, conn,
- new ScoutIndianSettlementMessage(getGame(), e)));
- register(ScoutSpeakToChiefMessage.TAG,
- (Connection conn, Element e) -> handler(true, conn,
- new ScoutSpeakToChiefMessage(getGame(), e)));
- register(SetBuildQueueMessage.TAG,
- (Connection conn, Element e) -> handler(true, conn,
- new SetBuildQueueMessage(getGame(), e)));
- register(SetCurrentStopMessage.TAG,
- (Connection conn, Element e) -> handler(false, conn,
- new SetCurrentStopMessage(getGame(), e)));
- register(SetDestinationMessage.TAG,
- (Connection conn, Element e) -> handler(false, conn,
- new SetDestinationMessage(getGame(), e)));
- register(SetGoodsLevelsMessage.TAG,
- (Connection conn, Element e) -> handler(true, conn,
- new SetGoodsLevelsMessage(getGame(), e)));
- register(SpySettlementMessage.TAG,
- (Connection conn, Element e) -> handler(false, conn,
- new SpySettlementMessage(getGame(), e)));
- register(TrainUnitInEuropeMessage.TAG,
- (Connection conn, Element e) -> handler(true, conn,
- new TrainUnitInEuropeMessage(getGame(), e)));
- register(UnloadGoodsMessage.TAG,
- (Connection conn, Element e) -> handler(true, conn,
- new UnloadGoodsMessage(getGame(), e)));
- register(UpdateTradeRouteMessage.TAG,
- (Connection conn, Element e) -> handler(false, conn,
- new UpdateTradeRouteMessage(getGame(), e)));
- register(WorkMessage.TAG,
- (Connection conn, Element e) -> handler(true, conn,
- new WorkMessage(getGame(), e)));
-
- register(MultipleMessage.TAG,
- (Connection connection, Element element) ->
- new MultipleMessage(getGame(), element)
- .handle(freeColServer, connection));
+ default:
+ return super.handleElement(c, e);
+ }
}
}
diff --git a/src/net/sf/freecol/server/control/PreGameInputHandler.java
b/src/net/sf/freecol/server/control/PreGameInputHandler.java
index 4a45a61320e..c19e4881fc2 100644
--- a/src/net/sf/freecol/server/control/PreGameInputHandler.java
+++ b/src/net/sf/freecol/server/control/PreGameInputHandler.java
@@ -19,6 +19,8 @@
package net.sf.freecol.server.control;
+import java.net.UnknownServiceException;
+
import net.sf.freecol.common.networking.Connection;
import net.sf.freecol.common.networking.LogoutMessage;
import net.sf.freecol.common.networking.ReadyMessage;
@@ -49,30 +51,39 @@ public final class PreGameInputHandler extends
ServerInputHandler {
*/
public PreGameInputHandler(FreeColServer freeColServer) {
super(freeColServer);
+ }
+
+ @Override
+ public Element handleElement(Connection c, Element e)
+ throws UnknownServiceException {
+ String tag = e.getTagName().intern();
+ switch (tag) {
+ case ReadyMessage.TAG:
+ return handler(false, c, new ReadyMessage(getGame(), e));
+
+ case TrivialMessage.REQUEST_LAUNCH_TAG:
+ return handler(false, c,
TrivialMessage.REQUEST_LAUNCH_MESSAGE);
+
+ case SetAvailableMessage.TAG:
+ return handler(false, c, new SetAvailableMessage(getGame(),
e));
+
+ case SetColorMessage.TAG:
+ return handler(false, c, new SetColorMessage(getGame(), e));
+
+ case SetNationMessage.TAG:
+ return handler(false, c, new SetNationMessage(getGame(), e));
+
+ case SetNationTypeMessage.TAG:
+ return handler(false, c, new SetNationTypeMessage(getGame(),
e));
+
+ case UpdateGameOptionsMessage.TAG:
+ return handler(false, c, new
UpdateGameOptionsMessage(getGame(), e));
+
+ case UpdateMapGeneratorOptionsMessage.TAG:
+ return handler(false, c, new
UpdateMapGeneratorOptionsMessage(getGame(), e));
- register(ReadyMessage.TAG,
- (Connection conn, Element e) -> handler(false, conn,
- new ReadyMessage(getGame(), e)));
- register(TrivialMessage.REQUEST_LAUNCH_TAG,
- (Connection conn, Element e) -> handler(false, conn,
- TrivialMessage.REQUEST_LAUNCH_MESSAGE));
- register(SetAvailableMessage.TAG,
- (Connection conn, Element e) -> handler(false, conn,
- new SetAvailableMessage(getGame(), e)));
- register(SetColorMessage.TAG,
- (Connection conn, Element e) -> handler(false, conn,
- new SetColorMessage(getGame(), e)));
- register(SetNationMessage.TAG,
- (Connection conn, Element e) -> handler(false, conn,
- new SetNationMessage(getGame(), e)));
- register(SetNationTypeMessage.TAG,
- (Connection conn, Element e) -> handler(false, conn,
- new SetNationTypeMessage(getGame(), e)));
- register(UpdateGameOptionsMessage.TAG,
- (Connection conn, Element e) -> handler(false, conn,
- new UpdateGameOptionsMessage(getGame(), e)));
- register(UpdateMapGeneratorOptionsMessage.TAG,
- (Connection conn, Element e) -> handler(false, conn,
- new UpdateMapGeneratorOptionsMessage(getGame(), e)));
+ default:
+ return super.handleElement(c, e);
+ }
}
}
diff --git a/src/net/sf/freecol/server/control/ServerInputHandler.java
b/src/net/sf/freecol/server/control/ServerInputHandler.java
index 1dab9bb0694..3e3ce43b326 100644
--- a/src/net/sf/freecol/server/control/ServerInputHandler.java
+++ b/src/net/sf/freecol/server/control/ServerInputHandler.java
@@ -19,6 +19,7 @@
package net.sf.freecol.server.control;
+import java.net.UnknownServiceException;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
@@ -44,7 +45,7 @@ import org.w3c.dom.Element;
/**
* Handles the network messages on the server side.
- *
+ *
* @see Controller
*/
public abstract class ServerInputHandler extends FreeColServerHolder
@@ -53,59 +54,42 @@ public abstract class ServerInputHandler extends
FreeColServerHolder
private static final Logger logger =
Logger.getLogger(ServerInputHandler.class.getName());
/**
- * A network request handler knows how to handle in a given request type.
- */
- public interface NetworkRequestHandler {
-
- /**
- * Handle a request represented by an {@link Element} and
- * return another {@link Element} or null as the answer.
- *
- * @param connection The message's {@code Connection}.
- * @param element The root {@code Element} of the message.
- * @return The reply {@code Element}, which may be null.
- */
- Element handle(Connection connection, Element element);
- };
-
- /**
- * The handler map provides named handlers for network
- * requests. Each handler deals with a given request type.
- */
- private final Map<String, NetworkRequestHandler> handlerMap
- = Collections.synchronizedMap(new HashMap<String,
NetworkRequestHandler>());
-
-
- /**
* The constructor to use.
- *
+ *
* @param freeColServer The main server object.
*/
public ServerInputHandler(final FreeColServer freeColServer) {
super(freeColServer);
-
- register(ChatMessage.TAG,
- (Connection conn, Element e) -> handler(false, conn,
- new ChatMessage(getGame(), e)));
-
- register(TrivialMessage.DISCONNECT_TAG,
- (Connection conn, Element e) -> handler(false, conn,
- TrivialMessage.DISCONNECT_MESSAGE));
-
- register(LogoutMessage.TAG,
- (Connection conn, Element e) -> handler(false, conn,
- new LogoutMessage(getGame(), e)));
}
-
/**
- * Register a network request handler.
- *
- * @param name The handler name.
- * @param handler The {@code NetworkRequestHandler} to register.
+ * Do the actual message handling.
+ *
+ * Common messages (applying to all game states) are handled here.
+ * Subclasses for individual game states will override it, but still call
this
+ * one (super), in order to get the common messages handled.
+ *
+ * @param connection The connection, where the messages coming in
+ * @param element The message Element
+ * @return Return element
+ * @throws UnknownServiceException if tag isn't handled
*/
- protected final void register(String name, NetworkRequestHandler handler) {
- this.handlerMap.put(name, handler);
+ public Element handleElement(Connection connection, Element element)
+ throws UnknownServiceException {
+ String tag = element.getTagName();
+ switch (tag) {
+ case ChatMessage.TAG:
+ return handler(false, connection, new ChatMessage(getGame(),
element));
+
+ case TrivialMessage.DISCONNECT_TAG:
+ return handler(false, connection,
TrivialMessage.DISCONNECT_MESSAGE);
+
+ case LogoutMessage.TAG:
+ return handler(false, connection, new LogoutMessage(getGame(),
element));
+
+ default:
+ throw new UnknownServiceException("ServerInputHandler:
unhandled tag: "+tag);
+ }
}
/**
@@ -138,27 +122,22 @@ public abstract class ServerInputHandler extends
FreeColServerHolder
*/
public final Element handle(Connection connection, Element element) {
if (element == null) return null;
- final FreeColServer freeColServer = getFreeColServer();
- final String tag = element.getTagName();
- final NetworkRequestHandler handler = handlerMap.get(tag);
- Element ret = null;
-
- if (handler == null) {
+ try {
+ Element ret = handleElement(connection, element);
+ logger.log(Level.FINEST, "Handling " + element.getTagName() + " ok
= "
+ + ((ret == null) ? "null" : ret.getTagName()));
+ return ret;
+ } catch (UnknownServiceException e) {
// Should we return an error here? The old handler returned null.
logger.warning("No "
- + freeColServer.getServerState().toString().toLowerCase()
- + " handler for " + tag);
- } else {
- try {
- ret = handler.handle(connection, element);
- logger.log(Level.FINEST, "Handling " + tag + " ok = "
- + ((ret == null) ? "null" : ret.getTagName()));
- } catch (Exception e) {
- // FIXME: should we really catch Exception? The old code did.
- logger.log(Level.WARNING, "Handling " + tag + " failed", e);
- connection.sendReconnect();
- }
+ + getFreeColServer().getServerState().toString().toLowerCase()
+ + " handler for " + element.getTagName()+" "+e);
+ return null;
+ } catch (Exception e) {
+ // FIXME: should we really catch Exception? The old code did.
+ logger.log(Level.WARNING, "Handling " + element.getTagName() + "
failed", e);
+ connection.sendReconnect();
}
- return ret;
+ return null;
}
}
diff --git a/src/net/sf/freecol/server/control/UserConnectionHandler.java
b/src/net/sf/freecol/server/control/UserConnectionHandler.java
index 6940f5a85d0..73d3d8ae00d 100644
--- a/src/net/sf/freecol/server/control/UserConnectionHandler.java
+++ b/src/net/sf/freecol/server/control/UserConnectionHandler.java
@@ -19,6 +19,7 @@
package net.sf.freecol.server.control;
+import java.net.UnknownServiceException;
import java.util.logging.Logger;
import net.sf.freecol.common.model.Game;
@@ -50,16 +51,25 @@ public final class UserConnectionHandler extends
ServerInputHandler {
*/
public UserConnectionHandler(final FreeColServer freeColServer) {
super(freeColServer);
+ }
+
+ @Override
+ public Element handleElement(Connection c, Element e)
+ throws UnknownServiceException {
+ String tag = e.getTagName();
+ switch (tag) {
+ case GameStateMessage.TAG:
+ return handler(false, c, new GameStateMessage(getGame(), e));
+
+ case LoginMessage.TAG:
+ return loginHandler(c, new LoginMessage(getGame(), e));
+
+ case VacantPlayersMessage.TAG:
+ return handler(false, c, new VacantPlayersMessage(getGame(),
e));
- register(GameStateMessage.TAG,
- (Connection conn, Element e) -> handler(false, conn,
- new GameStateMessage(getGame(), e)));
- register(LoginMessage.TAG,
- (Connection conn, Element e) -> loginHandler(conn,
- new LoginMessage(getGame(), e)));
- register(VacantPlayersMessage.TAG,
- (Connection conn, Element e) -> handler(false, conn,
- new VacantPlayersMessage(getGame(), e)));
+ default:
+ return super.handleElement(c, e);
+ }
}
/**
--
2.11.0.rc0.7.gbe5a750
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, SlashDot.org! http://sdm.link/slashdot
_______________________________________________
Freecol-developers mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/freecol-developers