From 972b47e1f6a9bdaceff7556631ff5d2938785a59 Mon Sep 17 00:00:00 2001
From: kearney <chris.kearney@urbanairship.com>
Date: Tue, 19 Aug 2014 17:08:55 -0700
Subject: [PATCH] stuff

---
 pom.xml                                       |  5 ++++
 .../command/DefaultCommandHandler.java        |  2 ++
 .../creeper/command/DefaultCommandType.java   |  3 ++-
 .../creeper/managers/GameManager.java         | 26 +++++++++++++++++++
 .../creeper/managers/PlayerManager.java       |  4 +++
 .../server/CreeperSimpleAuthenticator.java    |  5 +---
 6 files changed, 40 insertions(+), 5 deletions(-)

diff --git a/pom.xml b/pom.xml
index 8dfe950a..413a0d18 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 582e6a43..7c45299f 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 5c2d6758..0c97f248 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 d365d828..f597b9b9 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 759ecbb3..ea5a3d7c 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 454707a9..42412013 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
-- 
GitLab