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