Skip to content
Snippets Groups Projects
Commit 1c45f619 authored by Chris Kearney's avatar Chris Kearney
Browse files

added a help manager

parent a9070f80
No related branches found
No related tags found
No related merge requests found
...@@ -55,6 +55,9 @@ public class DefaultCommandHandler { ...@@ -55,6 +55,9 @@ public class DefaultCommandHandler {
case WHOAMI: case WHOAMI:
player.getChannel().write(player.getPlayerName() + "\r\n"); player.getChannel().write(player.getPlayerName() + "\r\n");
break; break;
case HELP:
gameManager.getHelpManager().printHelp(player, originalMessage);
break;
case UNKNOWN: case UNKNOWN:
gameManager.currentRoomLogic(creeperSession, event); gameManager.currentRoomLogic(creeperSession, event);
break; break;
......
...@@ -15,6 +15,7 @@ public enum DefaultCommandType implements CommandType { ...@@ -15,6 +15,7 @@ public enum DefaultCommandType implements CommandType {
GOSSIP(new HashSet<String>(Arrays.asList("gossip")), false, "Gossip to the entire server."), GOSSIP(new HashSet<String>(Arrays.asList("gossip")), false, "Gossip to the entire server."),
WHO(new HashSet<String>(Arrays.asList("who")), false, "List who is logged into the server."), WHO(new HashSet<String>(Arrays.asList("who")), false, "List who is logged into the server."),
WHOAMI(new HashSet<String>(Arrays.asList("whoami")), false, "Who am I?"), WHOAMI(new HashSet<String>(Arrays.asList("whoami")), false, "Who am I?"),
HELP(new HashSet<String>(Arrays.asList("help")), false, "This is the help."),
UNKNOWN(new HashSet<String>(Arrays.asList("")), true, ""); UNKNOWN(new HashSet<String>(Arrays.asList("")), true, "");
private Set<String> validCommandTriggers; private Set<String> validCommandTriggers;
......
package com.comandante.creeper.managers; package com.comandante.creeper.managers;
import com.comandante.creeper.command.DefaultCommandType;
import com.comandante.creeper.model.Movement; import com.comandante.creeper.model.Movement;
import com.comandante.creeper.model.Player; import com.comandante.creeper.model.Player;
import com.comandante.creeper.model.Room; import com.comandante.creeper.model.Room;
...@@ -34,6 +35,7 @@ public class GameManager { ...@@ -34,6 +35,7 @@ public class GameManager {
private final RoomManager roomManager; private final RoomManager roomManager;
private final PlayerManager playerManager; private final PlayerManager playerManager;
private final HelpManager helpManager;
private final NewUserRegistrationManager newUserRegistrationManager; private final NewUserRegistrationManager newUserRegistrationManager;
public NewUserRegistrationManager getNewUserRegistrationManager() { public NewUserRegistrationManager getNewUserRegistrationManager() {
...@@ -44,6 +46,11 @@ public class GameManager { ...@@ -44,6 +46,11 @@ public class GameManager {
this.roomManager = roomManager; this.roomManager = roomManager;
this.playerManager = playerManager; this.playerManager = playerManager;
this.newUserRegistrationManager = new NewUserRegistrationManager(playerManager); this.newUserRegistrationManager = new NewUserRegistrationManager(playerManager);
this.helpManager = new HelpManager();
}
public HelpManager getHelpManager() {
return helpManager;
} }
public RoomManager getRoomManager() { public RoomManager getRoomManager() {
...@@ -156,7 +163,21 @@ public class GameManager { ...@@ -156,7 +163,21 @@ public class GameManager {
Room destinationRoom = roomManager.getRoom(movement.getDestinationRoomId()); Room destinationRoom = roomManager.getRoom(movement.getDestinationRoomId());
sourceRoom.removePresentPlayer(movement.getPlayer().getPlayerId()); sourceRoom.removePresentPlayer(movement.getPlayer().getPlayerId());
for (Player next : getPresentPlayers(sourceRoom)) { for (Player next : getPresentPlayers(sourceRoom)) {
next.getChannel().write(movement.getPlayer().getPlayerName() + " used exit: " + movement.getOriginalMovementCommand() + ".\r\n"); StringBuilder sb = new StringBuilder();
sb.append(movement.getPlayer().getPlayerName());
if (movement.getOriginalMovementCommand().equals(DefaultCommandType.MOVE_NORTH)) {
sb.append(" exited to the north.");
} else if (movement.getOriginalMovementCommand().equals(DefaultCommandType.MOVE_EAST)) {
sb.append(" exited to the east.");
} else if (movement.getOriginalMovementCommand().equals(DefaultCommandType.MOVE_SOUTH)) {
sb.append(" exited to the south.");
} else if (movement.getOriginalMovementCommand().equals(DefaultCommandType.MOVE_WEST)) {
sb.append(" exited to the west.");
} else {
sb.append(" exited.");
}
sb.append("\r\n");
next.getChannel().write(sb.toString());
} }
for (Player next : getPresentPlayers(destinationRoom)) { for (Player next : getPresentPlayers(destinationRoom)) {
next.getChannel().write(movement.getPlayer().getPlayerName() + " arrived.\r\n"); next.getChannel().write(movement.getPlayer().getPlayerName() + " arrived.\r\n");
...@@ -216,7 +237,7 @@ public class GameManager { ...@@ -216,7 +237,7 @@ public class GameManager {
private void printExits(Room room, Channel channel) { private void printExits(Room room, Channel channel) {
StringBuilder stringBuilder = new StringBuilder(); StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("move: "); stringBuilder.append("exits: ");
stringBuilder.append(new Ansi().fg(Ansi.Color.BLUE).toString()); stringBuilder.append(new Ansi().fg(Ansi.Color.BLUE).toString());
if (room.getNorthId().isPresent()) { if (room.getNorthId().isPresent()) {
stringBuilder.append("north "); stringBuilder.append("north ");
......
package com.comandante.creeper.managers; package com.comandante.creeper.managers;
public class HelpManager { import com.comandante.creeper.command.DefaultCommandType;
import com.comandante.creeper.model.Player;
import org.fusesource.jansi.Ansi;
public class HelpManager {
public void printHelp(Player player, String originalMessage) {
StringBuilder sb = new StringBuilder();
DefaultCommandType[] values = DefaultCommandType.values();
sb.append(new Ansi().bg(Ansi.Color.RED).toString());
for (DefaultCommandType defaultCommandType : values) {
if (defaultCommandType.equals(DefaultCommandType.UNKNOWN)) {
continue;
}
sb.append(defaultCommandType.getValidCommandTriggers()).append(" ").append(defaultCommandType.getDescription()).append("\r\n");
}
sb.append(new Ansi().reset().toString()).append("\r\n");
player.getChannel().write(sb.toString());
}
} }
...@@ -50,7 +50,13 @@ public class NewUserRegistrationManager { ...@@ -50,7 +50,13 @@ public class NewUserRegistrationManager {
} }
private void createUser(CreeperSession session, MessageEvent e) { private void createUser(CreeperSession session, MessageEvent e) {
session.setPassword(Optional.of((String) e.getMessage())); String password = (String) e.getMessage();
if (password.length() < 8) {
e.getChannel().write("Passwords must be at least 8 characters.\r\n");
newUserRegistrationFlow(session, e);
return;
}
session.setPassword(Optional.of(password));
PlayerMetadata playerMetadata = new PlayerMetadata(session.getUsername().get(), session.getPassword().get(), new Player(session.getUsername().get()).getPlayerId()); PlayerMetadata playerMetadata = new PlayerMetadata(session.getUsername().get(), session.getPassword().get(), new Player(session.getUsername().get()).getPlayerId());
playerManager.savePlayerMetadata(playerMetadata); playerManager.savePlayerMetadata(playerMetadata);
e.getChannel().write("User created.\r\n"); e.getChannel().write("User created.\r\n");
......
...@@ -4,6 +4,7 @@ import com.comandante.creeper.command.DefaultCommandHandler; ...@@ -4,6 +4,7 @@ import com.comandante.creeper.command.DefaultCommandHandler;
import com.comandante.creeper.command.DefaultCommandType; import com.comandante.creeper.command.DefaultCommandType;
import com.comandante.creeper.managers.GameManager; import com.comandante.creeper.managers.GameManager;
import com.google.common.base.Optional; import com.google.common.base.Optional;
import org.fusesource.jansi.Ansi;
import org.jboss.netty.channel.ChannelEvent; import org.jboss.netty.channel.ChannelEvent;
import org.jboss.netty.channel.ChannelHandlerContext; import org.jboss.netty.channel.ChannelHandlerContext;
import org.jboss.netty.channel.ChannelStateEvent; import org.jboss.netty.channel.ChannelStateEvent;
...@@ -31,9 +32,15 @@ public class CreeperServerHandler extends SimpleChannelUpstreamHandler { ...@@ -31,9 +32,15 @@ public class CreeperServerHandler extends SimpleChannelUpstreamHandler {
@Override @Override
public void channelConnected(ChannelHandlerContext ctx, ChannelStateEvent e) throws Exception { public void channelConnected(ChannelHandlerContext ctx, ChannelStateEvent e) throws Exception {
// e.getChannel().write("\r\n\r\n\r\n\r\n" + GameManager.LOGO + "\r\n" + GameManager.VERSION + "\r\n\r\n\r\n\r\n"); StringBuilder stringBuilder = new StringBuilder();
e.getChannel().write("First time here? Type \"new\".\r\n"); stringBuilder
e.getChannel().write("username: "); .append(new Ansi().bg(Ansi.Color.GREEN).toString())
.append(new Ansi().fg(Ansi.Color.BLACK))
.append("\r\n\r\n\r\n\r\n" + GameManager.LOGO + "\r\n" + GameManager.VERSION + "\r\n\r\n\r\n\r\n")
.append(new Ansi().reset().toString() + "\r\n")
.append("First time here? Type \"new\".\r\n")
.append("username: ");
e.getChannel().write(stringBuilder.toString());
CreeperSession creeperSession = new CreeperSession(); CreeperSession creeperSession = new CreeperSession();
creeperSession.setState(CreeperSession.State.promptedForUsername); creeperSession.setState(CreeperSession.State.promptedForUsername);
ctx.setAttachment(creeperSession); ctx.setAttachment(creeperSession);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment