diff options
author | Pacien TRAN-GIRARD | 2016-05-12 15:43:28 +0200 |
---|---|---|
committer | Pacien TRAN-GIRARD | 2016-05-12 15:44:10 +0200 |
commit | 060d36a02e06fdc2943c8ff0b915057d50a13cb7 (patch) | |
tree | 20d4e949c628863c4992bf1697956f5f2e0a13fb | |
parent | 8fb64e8969f093c896ad9b5e327738e82941d30c (diff) | |
download | xblast-060d36a02e06fdc2943c8ff0b915057d50a13cb7.tar.gz |
Properly handle observer mode
-rw-r--r-- | src/ch/epfl/xblast/PlayerID.java | 2 | ||||
-rw-r--r-- | src/ch/epfl/xblast/client/Client.java | 30 | ||||
-rw-r--r-- | src/ch/epfl/xblast/client/XBlastComponent.java | 3 | ||||
-rw-r--r-- | src/ch/epfl/xblast/server/Server.java | 5 |
4 files changed, 31 insertions, 9 deletions
diff --git a/src/ch/epfl/xblast/PlayerID.java b/src/ch/epfl/xblast/PlayerID.java index 96b98e4..72a48b9 100644 --- a/src/ch/epfl/xblast/PlayerID.java +++ b/src/ch/epfl/xblast/PlayerID.java | |||
@@ -13,8 +13,6 @@ public enum PlayerID { | |||
13 | PLAYER_3, | 13 | PLAYER_3, |
14 | PLAYER_4; | 14 | PLAYER_4; |
15 | 15 | ||
16 | public static final byte OBSERVER = -1; | ||
17 | |||
18 | public Cell initialPosition() { | 16 | public Cell initialPosition() { |
19 | switch (this) { | 17 | switch (this) { |
20 | case PLAYER_1: | 18 | case PLAYER_1: |
diff --git a/src/ch/epfl/xblast/client/Client.java b/src/ch/epfl/xblast/client/Client.java index 5b331f2..b522312 100644 --- a/src/ch/epfl/xblast/client/Client.java +++ b/src/ch/epfl/xblast/client/Client.java | |||
@@ -15,10 +15,8 @@ import java.net.SocketAddress; | |||
15 | import java.net.StandardProtocolFamily; | 15 | import java.net.StandardProtocolFamily; |
16 | import java.nio.ByteBuffer; | 16 | import java.nio.ByteBuffer; |
17 | import java.nio.channels.DatagramChannel; | 17 | import java.nio.channels.DatagramChannel; |
18 | import java.util.ArrayList; | 18 | import java.util.*; |
19 | import java.util.Collections; | ||
20 | import java.util.List; | 19 | import java.util.List; |
21 | import java.util.Optional; | ||
22 | import java.util.function.Consumer; | 20 | import java.util.function.Consumer; |
23 | 21 | ||
24 | /** | 22 | /** |
@@ -154,6 +152,25 @@ public class Client { | |||
154 | 152 | ||
155 | } | 153 | } |
156 | 154 | ||
155 | private static PlayerID deserializePlayerID(byte b) { | ||
156 | if (b == Server.OBSERVER) | ||
157 | return null; | ||
158 | |||
159 | try { | ||
160 | return PlayerID.fromByte(b); | ||
161 | } catch (IllegalArgumentException e) { | ||
162 | return null; | ||
163 | } | ||
164 | } | ||
165 | |||
166 | private static GameState deserializeGameState(List<Byte> b) { | ||
167 | try { | ||
168 | return GameStateDeserializer.deserialize(b); | ||
169 | } catch (IllegalArgumentException e) { | ||
170 | return null; | ||
171 | } | ||
172 | } | ||
173 | |||
157 | private final Channel channel; | 174 | private final Channel channel; |
158 | private final GUI gui; | 175 | private final GUI gui; |
159 | 176 | ||
@@ -193,8 +210,11 @@ public class Client { | |||
193 | private void updateGameState() { | 210 | private void updateGameState() { |
194 | List<Byte> serializedGameState = this.channel.receiveGameState(true); | 211 | List<Byte> serializedGameState = this.channel.receiveGameState(true); |
195 | if (serializedGameState.size() < 1) return; | 212 | if (serializedGameState.size() < 1) return; |
196 | PlayerID player = PlayerID.fromByte(serializedGameState.get(0)); | 213 | |
197 | GameState gameState = GameStateDeserializer.deserialize(Lists.firstDropped(serializedGameState, 1)); | 214 | PlayerID player = deserializePlayerID(serializedGameState.get(0)); |
215 | GameState gameState = deserializeGameState(Lists.firstDropped(serializedGameState, 1)); | ||
216 | if (Objects.isNull(gameState)) return; | ||
217 | |||
198 | this.gui.setGameState(gameState, player); | 218 | this.gui.setGameState(gameState, player); |
199 | } | 219 | } |
200 | 220 | ||
diff --git a/src/ch/epfl/xblast/client/XBlastComponent.java b/src/ch/epfl/xblast/client/XBlastComponent.java index 0ef8c5c..dfc0be5 100644 --- a/src/ch/epfl/xblast/client/XBlastComponent.java +++ b/src/ch/epfl/xblast/client/XBlastComponent.java | |||
@@ -121,6 +121,9 @@ public final class XBlastComponent extends JComponent { | |||
121 | } | 121 | } |
122 | 122 | ||
123 | private static List<GameState.Player> sortPlayers(List<GameState.Player> players, PlayerID currentPlayerID) { | 123 | private static List<GameState.Player> sortPlayers(List<GameState.Player> players, PlayerID currentPlayerID) { |
124 | if (Objects.isNull(currentPlayerID)) | ||
125 | return players; | ||
126 | |||
124 | return Lists.sorted( | 127 | return Lists.sorted( |
125 | players, | 128 | players, |
126 | GameState.Player | 129 | GameState.Player |
diff --git a/src/ch/epfl/xblast/server/Server.java b/src/ch/epfl/xblast/server/Server.java index 1f29607..8a4b09b 100644 --- a/src/ch/epfl/xblast/server/Server.java +++ b/src/ch/epfl/xblast/server/Server.java | |||
@@ -22,9 +22,10 @@ import java.util.*; | |||
22 | public class Server { | 22 | public class Server { |
23 | 23 | ||
24 | public static final int DEFAULT_PORT = 2016; | 24 | public static final int DEFAULT_PORT = 2016; |
25 | |||
26 | private static final long REFRESH_RATE = (long) (50 * 1E6); // nanosecond | 25 | private static final long REFRESH_RATE = (long) (50 * 1E6); // nanosecond |
26 | |||
27 | private static final int DEFAULT_EXPECTED_CLIENTS = PlayerID.values().length; | 27 | private static final int DEFAULT_EXPECTED_CLIENTS = PlayerID.values().length; |
28 | public static final byte OBSERVER = -1; | ||
28 | 29 | ||
29 | private static class Channel { | 30 | private static class Channel { |
30 | 31 | ||
@@ -198,7 +199,7 @@ public class Server { | |||
198 | List<Byte> serialized = GameStateSerializer.serialize(BoardPainter.DEFAULT_BOARD_PAINTER, gs); | 199 | List<Byte> serialized = GameStateSerializer.serialize(BoardPainter.DEFAULT_BOARD_PAINTER, gs); |
199 | 200 | ||
200 | for (Map.Entry<SocketAddress, PlayerID> client : this.registeredClientsMap.entrySet()) { | 201 | for (Map.Entry<SocketAddress, PlayerID> client : this.registeredClientsMap.entrySet()) { |
201 | byte activePlayer = Objects.nonNull(client) ? client.getValue().toByte() : PlayerID.OBSERVER; | 202 | byte activePlayer = Objects.nonNull(client) ? client.getValue().toByte() : OBSERVER; |
202 | this.channel.send(Lists.prepended(serialized, activePlayer), client.getKey()); | 203 | this.channel.send(Lists.prepended(serialized, activePlayer), client.getKey()); |
203 | } | 204 | } |
204 | } | 205 | } |