From b50bdc47375bb905ce2dccfbbf05eb34fa53988a Mon Sep 17 00:00:00 2001
From: Chris Kearney <chris.kearney@urbanairship.com>
Date: Tue, 19 Aug 2014 01:24:36 -0700
Subject: [PATCH] fixed an annoying bug

---
 .../command/DefaultCommandHandler.java        |  2 +-
 .../creeper/managers/GameManager.java         | 36 ++++++++++++-------
 .../creeper/managers/PlayerManager.java       | 14 ++++----
 .../creeper/managers/RoomManager.java         |  2 ++
 .../com/comandante/creeper/model/Room.java    | 15 ++++----
 5 files changed, 41 insertions(+), 28 deletions(-)

diff --git a/src/main/java/com/comandante/creeper/command/DefaultCommandHandler.java b/src/main/java/com/comandante/creeper/command/DefaultCommandHandler.java
index 4ff01c77..582e6a43 100644
--- a/src/main/java/com/comandante/creeper/command/DefaultCommandHandler.java
+++ b/src/main/java/com/comandante/creeper/command/DefaultCommandHandler.java
@@ -58,7 +58,7 @@ public class DefaultCommandHandler {
     }
 
     private Player _player() {
-        return gameManager.getPlayerManager().getPlayer(creeperSession.getUsername().get());
+        return gameManager.getPlayerManager().getPlayerByUsername(creeperSession.getUsername().get());
     }
 
     private Room _currentRoom() {
diff --git a/src/main/java/com/comandante/creeper/managers/GameManager.java b/src/main/java/com/comandante/creeper/managers/GameManager.java
index aac25810..d365d828 100644
--- a/src/main/java/com/comandante/creeper/managers/GameManager.java
+++ b/src/main/java/com/comandante/creeper/managers/GameManager.java
@@ -6,7 +6,9 @@ import com.comandante.creeper.model.Player;
 import com.comandante.creeper.model.Room;
 import com.comandante.creeper.server.CreeperSession;
 import com.google.common.base.Optional;
+import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Interners;
+import com.google.common.collect.Sets;
 import org.fusesource.jansi.Ansi;
 import org.jboss.netty.channel.Channel;
 import org.jboss.netty.channel.MessageEvent;
@@ -50,8 +52,8 @@ public class GameManager {
         while (rooms.hasNext()) {
             Map.Entry<Integer, Room> next = rooms.next();
             Room room = next.getValue();
-            for (Player searchPlayer : room.getPresentPlayers()) {
-                if (searchPlayer.getPlayerId().equals(player.getPlayerId())) {
+            for (String searchPlayerId : room.getPresentPlayerIds()) {
+                if (searchPlayerId.equals(player.getPlayerId())) {
                     return Optional.of(room);
                 }
             }
@@ -59,23 +61,32 @@ public class GameManager {
         return Optional.absent();
     }
 
+    public Set<Player> getPresentPlayers(Room room) {
+        Set<String> presentPlayerIds = room.getPresentPlayerIds();
+        Set<Player> players = Sets.newHashSet();
+        for (String playerId: presentPlayerIds) {
+            players.add(playerManager.getPlayer(playerId));
+        }
+        return ImmutableSet.copyOf(players);
+    }
+
     public void movePlayer(Movement movement) {
         synchronized (Interners.newStrongInterner()) {
             Room sourceRoom = roomManager.getRoom(movement.getSourceRoomId());
             Room destinationRoom = roomManager.getRoom(movement.getDestinationRoomId());
-            sourceRoom.removePresentPlayer(movement.getPlayer());
-            for (Player next : sourceRoom.getPresentPlayers()) {
+            sourceRoom.removePresentPlayer(movement.getPlayer().getPlayerId());
+            for (Player next : getPresentPlayers(sourceRoom)) {
                 next.getChannel().write(movement.getPlayer().getPlayerName() + " used exit: " + movement.getOriginalMovementCommand() + ".\r\n");
             }
-            for (Player next : destinationRoom.getPresentPlayers()) {
+            for (Player next : getPresentPlayers(destinationRoom)) {
                 next.getChannel().write(movement.getPlayer().getPlayerName() + " arrived.\r\n");
             }
-            destinationRoom.addPresentPlayer(movement.getPlayer());
+            destinationRoom.addPresentPlayer(movement.getPlayer().getPlayerId());
         }
     }
 
     public void placePlayerInLobby(Player player) {
-        roomManager.getRoom(LOBBY_ID).addPresentPlayer(player);
+        roomManager.getRoom(LOBBY_ID).addPresentPlayer(player.getPlayerId());
     }
 
     public void say(Player sourcePlayer, String message) {
@@ -85,7 +96,7 @@ public class GameManager {
         }
 
         Room playerCurrentRoom = playerCurrentRoomOpt.get();
-        Set<Player> presentPlayers = playerCurrentRoom.getPresentPlayers();
+        Set<Player> presentPlayers = getPresentPlayers(playerCurrentRoom);
 
         for (Player presentPlayer : presentPlayers) {
             StringBuilder stringBuilder = new StringBuilder();
@@ -137,14 +148,15 @@ public class GameManager {
     }
 
     public void currentRoomLogic(CreeperSession creeperSession, MessageEvent e) {
-        final Player player = playerManager.getPlayer(creeperSession.getUsername().get());
+        final Player player = playerManager.getPlayerByUsername(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(creeperSession.getUsername().get()).getPlayerId())) {
+        for (String searchPlayerId : playerCurrentRoom.getPresentPlayerIds()) {
+            if (searchPlayerId.equals(player.getPlayerId())) {
                 continue;
             }
-            e.getChannel().write(next.getPlayerName() + " is here.\r\n");
+            Player searchPlayer = playerManager.getPlayer(searchPlayerId);
+            e.getChannel().write(searchPlayer.getPlayerName() + " is here.\r\n");
         }
         printExits(playerCurrentRoom, e.getChannel());
     }
diff --git a/src/main/java/com/comandante/creeper/managers/PlayerManager.java b/src/main/java/com/comandante/creeper/managers/PlayerManager.java
index 3fac47a1..759ecbb3 100644
--- a/src/main/java/com/comandante/creeper/managers/PlayerManager.java
+++ b/src/main/java/com/comandante/creeper/managers/PlayerManager.java
@@ -15,12 +15,12 @@ public class PlayerManager {
         return players.putIfAbsent(player.getPlayerId(), player);
     }
 
-    public Player getPlayer(Player player) {
-        return players.get(player.getPlayerId());
+    public Player getPlayerByUsername(String username) {
+        return getPlayer(new String(Base64.encodeBase64(username.getBytes())));
     }
 
-    public Player getPlayer(String username) {
-        return players.get(new String(Base64.encodeBase64(username.getBytes())));
+    public Player getPlayer(String playerId) {
+        return players.get(playerId);
     }
 
     public Iterator<java.util.Map.Entry<String, Player>> getPlayers() {
@@ -28,14 +28,14 @@ public class PlayerManager {
     }
 
     public void removePlayer(String username) {
-        Player player = getPlayer(username);
+        Player player = getPlayerByUsername(username);
         if (player.getChannel() != null) {
             player.getChannel().disconnect();
         }
-        players.remove(player);
+        players.remove(player.getPlayerId());
     }
 
     public boolean doesPlayerExist(String username) {
-       return players.containsKey(Base64.encodeBase64(username.getBytes()));
+       return players.containsKey(new String(Base64.encodeBase64(username.getBytes())));
     }
 }
diff --git a/src/main/java/com/comandante/creeper/managers/RoomManager.java b/src/main/java/com/comandante/creeper/managers/RoomManager.java
index d0d6f19b..83fad084 100644
--- a/src/main/java/com/comandante/creeper/managers/RoomManager.java
+++ b/src/main/java/com/comandante/creeper/managers/RoomManager.java
@@ -21,4 +21,6 @@ public class RoomManager {
         return rooms.entrySet().iterator();
     }
 
+
+
 }
diff --git a/src/main/java/com/comandante/creeper/model/Room.java b/src/main/java/com/comandante/creeper/model/Room.java
index 9508b627..4025afdb 100644
--- a/src/main/java/com/comandante/creeper/model/Room.java
+++ b/src/main/java/com/comandante/creeper/model/Room.java
@@ -1,7 +1,6 @@
 package com.comandante.creeper.model;
 
 import com.google.common.base.Optional;
-import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Sets;
 import org.fusesource.jansi.Ansi;
 
@@ -17,7 +16,7 @@ public class Room {
     public Optional<Integer> eastId;
     public Optional<Integer> southId;
     public String roomDescription;
-    private Set<Player> presentPlayers = Sets.<Player>newConcurrentHashSet();
+    private Set<String> presentPlayerIds = Sets.<String>newConcurrentHashSet();
 
     public Room(Integer roomId, Optional<Integer> northId, Optional<Integer> westId, Optional<Integer> eastId, Optional<Integer> southId, String roomDescription) {
         this.roomId = roomId;
@@ -28,16 +27,16 @@ public class Room {
         this.roomDescription = roomDescription;
     }
 
-    public java.util.Set<Player> getPresentPlayers()  {
-        return ImmutableSet.<Player>builder().addAll(presentPlayers.iterator()).build();
+    public java.util.Set<String> getPresentPlayerIds()  {
+        return presentPlayerIds;
     }
 
-    public void addPresentPlayer(Player player) {
-        presentPlayers.add(player);
+    public void addPresentPlayer(String playerId) {
+        presentPlayerIds.add(playerId);
     }
 
-    public void removePresentPlayer(Player player) {
-        presentPlayers.remove(player);
+    public void removePresentPlayer(String playerId) {
+        presentPlayerIds.remove(playerId);
     }
 
     public String getRoomDescription() {
-- 
GitLab