diff --git a/src/main/java/com/comandante/command/DefaultCommandHandler.java b/src/main/java/com/comandante/command/DefaultCommandHandler.java index b2d64ebf04706586710f3046bd5f50966ce079ca..e80b36c30543b12cb8f298929a0505c0df045d7b 100644 --- a/src/main/java/com/comandante/command/DefaultCommandHandler.java +++ b/src/main/java/com/comandante/command/DefaultCommandHandler.java @@ -1,89 +1,64 @@ package com.comandante.command; +import com.comandante.managers.MovementManager; import com.comandante.model.Movement; import com.comandante.managers.GameManager; import com.comandante.model.Player; import com.comandante.model.Room; -import com.comandante.server.CreeperSessionState; +import com.comandante.server.CreeperSession; import com.google.common.base.Optional; import org.jboss.netty.channel.MessageEvent; public class DefaultCommandHandler { GameManager gameManager; - CreeperSessionState creeperSessionState; + CreeperSession creeperSession; MessageEvent event; - public DefaultCommandHandler(GameManager gameManager, CreeperSessionState creeperSessionState, MessageEvent event) { + public DefaultCommandHandler(GameManager gameManager, CreeperSession creeperSession, MessageEvent event) { this.gameManager = gameManager; - this.creeperSessionState = creeperSessionState; + this.creeperSession = creeperSession; this.event = event; } public void handle(DefaultCommandType cmdType) { final String originalMessage = cmdType.getOriginalMessage(); final Player player = _player(); - Optional<Movement> movementOptional = Optional.absent(); - Room currentRoom = null; + Optional<Movement> movement = Optional.absent(); switch(cmdType) { case MOVE_NORTH: - currentRoom = _currentRoom(); - if (!currentRoom.getNorthId().isPresent()) { - event.getChannel().write("There's no northern exit.\r\n"); - break; - } - movementOptional = Optional.of( - new Movement(player, currentRoom.getRoomId(), currentRoom.getNorthId().get(), cmdType)); + movement = MovementManager.moveNorth(cmdType, player, _currentRoom(), event); break; case MOVE_SOUTH: - currentRoom = _currentRoom(); - if (!currentRoom.getSouthId().isPresent()) { - event.getChannel().write("There's no southern exit.\r\n"); - break; - } - movementOptional = Optional.of( - new Movement(player, currentRoom.getRoomId(), currentRoom.getSouthId().get(), cmdType)); + movement = MovementManager.moveSouth(cmdType, player, _currentRoom(), event); break; case MOVE_EAST: - currentRoom = _currentRoom(); - if (!currentRoom.getEastId().isPresent()) { - event.getChannel().write("There's no eastern exit.\r\n"); - break; - } - movementOptional = Optional.of( - new Movement(player, currentRoom.getRoomId(), currentRoom.getEastId().get(), cmdType)); + movement = MovementManager.moveEast(cmdType, player, _currentRoom(), event); break; case MOVE_WEST: - currentRoom = _currentRoom(); - if (!currentRoom.getWestId().isPresent()) { - event.getChannel().write("There's no western exit.\r\n"); - break; - } - movementOptional = Optional.of( - new Movement(player, currentRoom.getRoomId(), currentRoom.getWestId().get(), cmdType)); + movement = MovementManager.moveWest(cmdType, player, _currentRoom(), event); break; case SAY: gameManager.say(player, originalMessage.replaceFirst("^say ", "")); break; case GOSSIP: - String s = originalMessage.replaceFirst("^gossip ", ""); - gameManager.gossip(player, s); + gameManager.gossip(player, originalMessage.replaceFirst("^gossip ", "")); break; case UNKNOWN: - gameManager.currentRoomLogic(creeperSessionState, event); + gameManager.currentRoomLogic(creeperSession, event); break; } - if (movementOptional.isPresent()) { - gameManager.movePlayer(movementOptional.get()); - gameManager.currentRoomLogic(creeperSessionState, event); + if (movement.isPresent()) { + gameManager.movePlayer(movement.get()); + gameManager.currentRoomLogic(creeperSession, event); } } private Player _player() { - return gameManager.getPlayerManager().getPlayer(creeperSessionState.getUsername().get()); + return gameManager.getPlayerManager().getPlayer(creeperSession.getUsername().get()); } private Room _currentRoom() { diff --git a/src/main/java/com/comandante/managers/GameManager.java b/src/main/java/com/comandante/managers/GameManager.java index b79f2f4f203b6a76524a3cf084968121339ccf22..eb98ab7b0dc7513cbdac00d874a1603c24f81ceb 100644 --- a/src/main/java/com/comandante/managers/GameManager.java +++ b/src/main/java/com/comandante/managers/GameManager.java @@ -4,7 +4,7 @@ package com.comandante.managers; import com.comandante.model.Movement; import com.comandante.model.Player; import com.comandante.model.Room; -import com.comandante.server.CreeperSessionState; +import com.comandante.server.CreeperSession; import com.google.common.base.Optional; import com.google.common.collect.Interners; import org.fusesource.jansi.Ansi; @@ -123,12 +123,12 @@ public class GameManager { channel.write("\r\n"); } - public void currentRoomLogic(CreeperSessionState creeperSessionState, MessageEvent e) { - final Player player = playerManager.getPlayer(creeperSessionState.getUsername().get()); + public void currentRoomLogic(CreeperSession creeperSession, MessageEvent e) { + final Player player = playerManager.getPlayer(creeperSession.getUsername().get()); final Room playerCurrentRoom = getPlayerCurrentRoom(player).get(); e.getChannel().write(playerCurrentRoom.getRoomDescription() + "\r\n"); for (Player next : playerCurrentRoom.getPresentPlayers()) { - if (next.getPlayerId().equals(new Player(creeperSessionState.getUsername().get()).getPlayerId())) { + if (next.getPlayerId().equals(new Player(creeperSession.getUsername().get()).getPlayerId())) { continue; } e.getChannel().write(next.getPlayerName() + " is here.\r\n"); diff --git a/src/main/java/com/comandante/managers/MovementManager.java b/src/main/java/com/comandante/managers/MovementManager.java new file mode 100644 index 0000000000000000000000000000000000000000..c18d978c8e575f849440fa980874b916d40cf1e7 --- /dev/null +++ b/src/main/java/com/comandante/managers/MovementManager.java @@ -0,0 +1,47 @@ +package com.comandante.managers; + +import com.comandante.command.CommandType; +import com.comandante.model.Movement; +import com.comandante.model.Player; +import com.comandante.model.Room; +import com.google.common.base.Optional; +import org.jboss.netty.channel.MessageEvent; + +public class MovementManager { + + public static Optional<Movement> moveNorth(CommandType cmdType, Player player, Room currentRoom, MessageEvent event) { + if (!currentRoom.getNorthId().isPresent()) { + event.getChannel().write("There's no northern exit.\r\n"); + return Optional.absent(); + } + return Optional.of( + new Movement(player, currentRoom.getRoomId(), currentRoom.getNorthId().get(), cmdType)); + } + + public static Optional<Movement> moveSouth(CommandType cmdType, Player player, Room currentRoom, MessageEvent event) { + if (!currentRoom.getSouthId().isPresent()) { + event.getChannel().write("There's no southern exit.\r\n"); + return Optional.absent(); + } + return Optional.of( + new Movement(player, currentRoom.getRoomId(), currentRoom.getSouthId().get(), cmdType)); + } + + public static Optional<Movement> moveEast(CommandType cmdType, Player player, Room currentRoom, MessageEvent event) { + if (!currentRoom.getEastId().isPresent()) { + event.getChannel().write("There's no eastern exit.\r\n"); + return Optional.absent(); + } + return Optional.of( + new Movement(player, currentRoom.getRoomId(), currentRoom.getEastId().get(), cmdType)); + } + + public static Optional<Movement> moveWest(CommandType cmdType, Player player, Room currentRoom, MessageEvent event) { + if (!currentRoom.getWestId().isPresent()) { + event.getChannel().write("There's no western exit.\r\n"); + return Optional.absent(); + } + return Optional.of( + new Movement(player, currentRoom.getRoomId(), currentRoom.getWestId().get(), cmdType)); + } +} diff --git a/src/main/java/com/comandante/server/CreeperServerHandler.java b/src/main/java/com/comandante/server/CreeperServerHandler.java index 793bd53908934bd2007386a92f4c65ecb80660f0..fd7f9f85691a0219b0da40f7b01aeea3bfe265b4 100644 --- a/src/main/java/com/comandante/server/CreeperServerHandler.java +++ b/src/main/java/com/comandante/server/CreeperServerHandler.java @@ -33,21 +33,21 @@ public class CreeperServerHandler extends SimpleChannelUpstreamHandler { public void channelConnected(ChannelHandlerContext ctx, ChannelStateEvent e) throws Exception { // Send greeting for a new connection. e.getChannel().write("username: "); - CreeperSessionState creeperSessionState = new CreeperSessionState(); - creeperSessionState.setState(CreeperSessionState.State.promptedForUsername); - ctx.setAttachment(creeperSessionState); + CreeperSession creeperSession = new CreeperSession(); + creeperSession.setState(CreeperSession.State.promptedForUsername); + ctx.setAttachment(creeperSession); } @Override public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws InterruptedException { - CreeperSessionState creeperSessionState = (CreeperSessionState) ctx.getAttachment(); - if (!creeperSessionState.isAuthed()) { + CreeperSession creeperSession = (CreeperSession) ctx.getAttachment(); + if (!creeperSession.isAuthed()) { doAuthentication(ctx, e); - if (creeperSessionState.isAuthed()) { - gameManager.currentRoomLogic(creeperSessionState, e); + if (creeperSession.isAuthed()) { + gameManager.currentRoomLogic(creeperSession, e); } } else { - DefaultCommandHandler cmdHandler = new DefaultCommandHandler(gameManager, creeperSessionState, e); + DefaultCommandHandler cmdHandler = new DefaultCommandHandler(gameManager, creeperSession, e); DefaultCommandType cmdType = (DefaultCommandType) DefaultCommandType.getCommandTypeFromMessage(((String) e.getMessage())); cmdHandler.handle(cmdType); @@ -56,24 +56,24 @@ public class CreeperServerHandler extends SimpleChannelUpstreamHandler { private void doAuthentication(ChannelHandlerContext ctx, MessageEvent e) { String message = (String) e.getMessage(); - CreeperSessionState creeperSessionState = (CreeperSessionState) ctx.getAttachment(); - if (creeperSessionState.getState().equals(CreeperSessionState.State.promptedForUsername)) { - creeperSessionState.setUsername(Optional.of(message)); - creeperSessionState.setState(CreeperSessionState.State.promptedForPassword); + CreeperSession creeperSession = (CreeperSession) ctx.getAttachment(); + if (creeperSession.getState().equals(CreeperSession.State.promptedForUsername)) { + creeperSession.setUsername(Optional.of(message)); + creeperSession.setState(CreeperSession.State.promptedForPassword); e.getChannel().write("password: "); return; } - if (creeperSessionState.getState().equals(CreeperSessionState.State.promptedForPassword)) { - creeperSessionState.setPassword(Optional.of(message)); + if (creeperSession.getState().equals(CreeperSession.State.promptedForPassword)) { + creeperSession.setPassword(Optional.of(message)); } - boolean b = creeperAuthenticator.authenticateAndRegisterPlayer(creeperSessionState.getUsername().get(), creeperSessionState.getPassword().get(), e.getChannel()); + boolean b = creeperAuthenticator.authenticateAndRegisterPlayer(creeperSession.getUsername().get(), creeperSession.getPassword().get(), e.getChannel()); if (!b) { e.getChannel().write("Auth failed.\r\n"); e.getChannel().write("username: "); - creeperSessionState.setState(CreeperSessionState.State.promptedForUsername); + creeperSession.setState(CreeperSession.State.promptedForUsername); } else { - creeperSessionState.setAuthed(true); - creeperSessionState.setState(CreeperSessionState.State.authed); + creeperSession.setAuthed(true); + creeperSession.setState(CreeperSession.State.authed); e.getChannel().write("Welcome to bertha.\r\n"); } } diff --git a/src/main/java/com/comandante/server/CreeperSessionState.java b/src/main/java/com/comandante/server/CreeperSession.java similarity index 96% rename from src/main/java/com/comandante/server/CreeperSessionState.java rename to src/main/java/com/comandante/server/CreeperSession.java index 8dc4f7c2720975130b66b271f2f163491828a675..011bafb32aa5afc49a0075ea5bf1a0721c6a0bc6 100644 --- a/src/main/java/com/comandante/server/CreeperSessionState.java +++ b/src/main/java/com/comandante/server/CreeperSession.java @@ -2,7 +2,7 @@ package com.comandante.server; import com.google.common.base.Optional; -public class CreeperSessionState { +public class CreeperSession { private Optional<String> username = Optional.absent(); private Optional<String> password = Optional.absent();