diff --git a/pom.xml b/pom.xml index 8dfe950a442f393ad26e1a4e5559d1921eea9d9a..413a0d18feb5d31e5e1b55ba0b5dbbffca524cd7 100644 --- a/pom.xml +++ b/pom.xml @@ -28,6 +28,11 @@ <artifactId>jansi</artifactId> <version>1.9</version> </dependency> + <dependency> + <groupId>org.mapdb</groupId> + <artifactId>mapdb</artifactId> + <version>1.0.6</version> + </dependency> </dependencies> <build> diff --git a/src/main/java/com/comandante/creeper/command/DefaultCommandHandler.java b/src/main/java/com/comandante/creeper/command/DefaultCommandHandler.java index 582e6a43a2445f2d15de2b80fddfe3106eea84bb..7c45299f6a1531d1b37278540726e22c4e35cd91 100644 --- a/src/main/java/com/comandante/creeper/command/DefaultCommandHandler.java +++ b/src/main/java/com/comandante/creeper/command/DefaultCommandHandler.java @@ -46,6 +46,8 @@ public class DefaultCommandHandler { case GOSSIP: gameManager.gossip(player, originalMessage.replaceFirst("^gossip ", "")); break; + case WHO: + gameManager.who(player); case UNKNOWN: gameManager.currentRoomLogic(creeperSession, event); break; diff --git a/src/main/java/com/comandante/creeper/command/DefaultCommandType.java b/src/main/java/com/comandante/creeper/command/DefaultCommandType.java index 5c2d67589ccfb66b3d43d0b50600e3f9416cdbbe..0c97f248982073c440a7e44333c3be55c7bc4e53 100644 --- a/src/main/java/com/comandante/creeper/command/DefaultCommandType.java +++ b/src/main/java/com/comandante/creeper/command/DefaultCommandType.java @@ -12,7 +12,8 @@ public enum DefaultCommandType implements CommandType { MOVE_WEST(new HashSet<String>(Arrays.asList("w", "West")), false, "Move west."), SAY(new HashSet<String>(Arrays.asList("say")), true, "Say something to the current room."), GOSSIP(new HashSet<String>(Arrays.asList("gossip")), true, "Gossip to the entire server."), - UNKNOWN(new HashSet<String>(Arrays.asList("gossip")), true, "Gossip to the entire server."); + WHO(new HashSet<String>(Arrays.asList("who")), true, "List who is logged into the server."), + UNKNOWN(new HashSet<String>(Arrays.asList("")), true, ""); private Set<String> validCommandTriggers; private boolean caseSensitive; diff --git a/src/main/java/com/comandante/creeper/managers/GameManager.java b/src/main/java/com/comandante/creeper/managers/GameManager.java index d365d82884f9ba77a03dbf24930feb0faa9e9b17..f597b9b94184f67ea0cf200bffd9b73c77d2d9e4 100644 --- a/src/main/java/com/comandante/creeper/managers/GameManager.java +++ b/src/main/java/com/comandante/creeper/managers/GameManager.java @@ -70,6 +70,32 @@ public class GameManager { return ImmutableSet.copyOf(players); } + public void who(Player player) { + Set<Player> allPlayers = getAllPlayers(); + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.append(new Ansi().fg(Ansi.Color.CYAN).toString()); + stringBuilder.append("User\r\n----\r\n"); + for (Player allPlayer: allPlayers) { + stringBuilder.append(allPlayer.getPlayerName()).append("\r\n"); + } + stringBuilder.append(new Ansi().reset().toString()); + player.getChannel().write(stringBuilder.toString() + "\r\n"); + } + + public Set<Player> getAllPlayers() { + ImmutableSet.Builder<Player> builder = ImmutableSet.builder(); + Iterator<Map.Entry<Integer, Room>> rooms = roomManager.getRooms(); + while (rooms.hasNext()) { + Map.Entry<Integer, Room> next = rooms.next(); + Room room = next.getValue(); + Set<Player> presentPlayers = getPresentPlayers(room); + for (Player player: presentPlayers) { + builder.add(player); + } + } + return builder.build(); + } + public void movePlayer(Movement movement) { synchronized (Interners.newStrongInterner()) { Room sourceRoom = roomManager.getRoom(movement.getSourceRoomId()); diff --git a/src/main/java/com/comandante/creeper/managers/PlayerManager.java b/src/main/java/com/comandante/creeper/managers/PlayerManager.java index 759ecbb345ad4108a323afbbaf19e5311971bbc2..ea5a3d7c97456bc2f91c003e011a38b35fc58c84 100644 --- a/src/main/java/com/comandante/creeper/managers/PlayerManager.java +++ b/src/main/java/com/comandante/creeper/managers/PlayerManager.java @@ -3,6 +3,8 @@ package com.comandante.creeper.managers; import com.comandante.creeper.model.Player; import org.apache.commons.codec.binary.Base64; +import org.mapdb.DBMaker; +import org.mapdb.HTreeMap; import java.util.Iterator; import java.util.concurrent.ConcurrentHashMap; @@ -16,6 +18,8 @@ public class PlayerManager { } public Player getPlayerByUsername(String username) { + HTreeMap<String, Player> objectObjectHTreeMap = DBMaker.newTempHashMap(); + return getPlayer(new String(Base64.encodeBase64(username.getBytes()))); } diff --git a/src/main/java/com/comandante/creeper/server/CreeperSimpleAuthenticator.java b/src/main/java/com/comandante/creeper/server/CreeperSimpleAuthenticator.java index 454707a9d6f5f4b458062c2a35bbceed1aa616df..424120130b8f3ae54cba63050b6d4e068cf7229d 100644 --- a/src/main/java/com/comandante/creeper/server/CreeperSimpleAuthenticator.java +++ b/src/main/java/com/comandante/creeper/server/CreeperSimpleAuthenticator.java @@ -20,10 +20,7 @@ public class CreeperSimpleAuthenticator implements CreeperAuthenticator { userMap = new HashMap<String, String>(); userMap.put("chris", "poop"); userMap.put("brian", "poop"); - userMap.put("test1", "poop"); - userMap.put("test2", "poop"); - userMap.put("test3", "poop"); - userMap.put("test4", "poop"); + userMap.put("sean", "poop"); } @Override