From 4fc00f8a3c58f5b6faca02ecd37f213ef6867e07 Mon Sep 17 00:00:00 2001 From: Alistair McIntyre Date: Wed, 16 Aug 2017 17:57:22 +1200 Subject: [PATCH] Boat names now change, just the issue of the lobby not updating unless another person joins/leaves to try and fix. tags: #story[1142] --- .../java/seng302/gameServer/GameState.java | 13 ++++++++ .../gameServer/ServerPacketParser.java | 10 ++++-- .../gameServer/ServerToClientThread.java | 32 +++++++++++-------- src/main/java/seng302/model/ServerYacht.java | 4 +++ .../controllers/CustomizationController.java | 3 ++ 5 files changed, 47 insertions(+), 15 deletions(-) diff --git a/src/main/java/seng302/gameServer/GameState.java b/src/main/java/seng302/gameServer/GameState.java index a6716807..764f0f66 100644 --- a/src/main/java/seng302/gameServer/GameState.java +++ b/src/main/java/seng302/gameServer/GameState.java @@ -10,6 +10,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import seng302.gameServer.server.messages.BoatAction; import seng302.gameServer.server.messages.BoatStatus; +import seng302.gameServer.server.messages.CustomizeRequestType; import seng302.gameServer.server.messages.MarkRoundingMessage; import seng302.gameServer.server.messages.MarkType; import seng302.gameServer.server.messages.Message; @@ -509,6 +510,18 @@ public class GameState implements Runnable { return false; } + public static void customizePlayer(long playerID, CustomizeRequestType requestType, + byte[] customizeData) { + System.out.println(playerID + " " + requestType.toString()); + ServerYacht playerYacht = yachts.get((int) playerID); + + if (requestType.equals(CustomizeRequestType.NAME)) { + String name = new String(customizeData); + System.out.println(playerYacht.getBoatName()); + playerYacht.setBoatName(name); + System.out.println(playerYacht.getBoatName()); + } + } private static Mark markCollidedWith(ServerYacht yacht) { Set marksInRace = GameState.getMarks(); diff --git a/src/main/java/seng302/gameServer/ServerPacketParser.java b/src/main/java/seng302/gameServer/ServerPacketParser.java index 84f8fd17..4b62c933 100644 --- a/src/main/java/seng302/gameServer/ServerPacketParser.java +++ b/src/main/java/seng302/gameServer/ServerPacketParser.java @@ -1,11 +1,11 @@ package seng302.gameServer; import java.util.Arrays; - +import seng302.gameServer.server.messages.BoatAction; import seng302.gameServer.server.messages.ClientType; +import seng302.gameServer.server.messages.CustomizeRequestType; import seng302.gameServer.server.messages.Message; import seng302.model.stream.packets.StreamPacket; -import seng302.gameServer.server.messages.BoatAction; public class ServerPacketParser { @@ -22,5 +22,11 @@ public class ServerPacketParser { long value = Message.bytesToLong(Arrays.copyOfRange(payload, 0, 1)); return ClientType.getClientType((int) value); } + + public static CustomizeRequestType extractCustomizationType(StreamPacket packet) { + byte[] payload = packet.getPayload(); + long type = Message.bytesToLong(Arrays.copyOfRange(payload, 4, 5)); + return CustomizeRequestType.getRequestType((int) type); + } } diff --git a/src/main/java/seng302/gameServer/ServerToClientThread.java b/src/main/java/seng302/gameServer/ServerToClientThread.java index 9b773ac1..2f26b67e 100644 --- a/src/main/java/seng302/gameServer/ServerToClientThread.java +++ b/src/main/java/seng302/gameServer/ServerToClientThread.java @@ -10,6 +10,7 @@ import java.io.OutputStream; import java.net.Socket; import java.net.SocketException; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import java.util.Observable; import java.util.Observer; @@ -19,26 +20,23 @@ import java.util.zip.CRC32; import java.util.zip.Checksum; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import seng302.gameServer.server.messages.BoatAction; +import seng302.gameServer.server.messages.BoatLocationMessage; +import seng302.gameServer.server.messages.ClientType; +import seng302.gameServer.server.messages.CustomizeRequestType; +import seng302.gameServer.server.messages.Message; +import seng302.gameServer.server.messages.RegistrationResponseMessage; +import seng302.gameServer.server.messages.RegistrationResponseStatus; +import seng302.gameServer.server.messages.XMLMessage; +import seng302.gameServer.server.messages.XMLMessageSubType; import seng302.gameServer.server.messages.YachtEventCodeMessage; import seng302.model.Player; +import seng302.model.ServerYacht; import seng302.model.stream.packets.PacketType; import seng302.model.stream.packets.StreamPacket; import seng302.model.stream.xml.generator.Race; import seng302.model.stream.xml.generator.Regatta; import seng302.utilities.XMLGenerator; -import seng302.gameServer.server.messages.BoatAction; -import seng302.gameServer.server.messages.BoatLocationMessage; -import seng302.gameServer.server.messages.BoatSubMessage; -import seng302.gameServer.server.messages.ClientType; -import seng302.gameServer.server.messages.Message; -import seng302.gameServer.server.messages.RaceStatus; -import seng302.gameServer.server.messages.RaceStatusMessage; -import seng302.gameServer.server.messages.RaceType; -import seng302.gameServer.server.messages.RegistrationResponseMessage; -import seng302.gameServer.server.messages.RegistrationResponseStatus; -import seng302.gameServer.server.messages.XMLMessage; -import seng302.gameServer.server.messages.XMLMessageSubType; -import seng302.model.ServerYacht; /** * A class describing a single connection to a Client for the purposes of sending and receiving on @@ -206,6 +204,14 @@ public class ServerToClientThread implements Runnable, Observer { case RACE_CUSTOMIZATION_REQUEST: System.out.println("CUSTOMIZATION RECEIVED"); + Long sourceID = Message + .bytesToLong(Arrays.copyOfRange(payload, 0, 3)); + CustomizeRequestType requestType = ServerPacketParser + .extractCustomizationType( + new StreamPacket(type, payloadLength, timeStamp, payload)); + GameState.customizePlayer(sourceID, requestType, + Arrays.copyOfRange(payload, 6, payload.length)); + break; } } else { logger.warn("Packet has been dropped", 1); diff --git a/src/main/java/seng302/model/ServerYacht.java b/src/main/java/seng302/model/ServerYacht.java index 2f10929c..9abbd520 100644 --- a/src/main/java/seng302/model/ServerYacht.java +++ b/src/main/java/seng302/model/ServerYacht.java @@ -298,6 +298,10 @@ public class ServerYacht extends Observable { return country; } + public void setBoatName(String name) { + boatName = name; + shortName = name.split(" ")[0]; + } public GeoPoint getLocation() { return location; diff --git a/src/main/java/seng302/visualiser/controllers/CustomizationController.java b/src/main/java/seng302/visualiser/controllers/CustomizationController.java index be70db7c..08e1c9d0 100644 --- a/src/main/java/seng302/visualiser/controllers/CustomizationController.java +++ b/src/main/java/seng302/visualiser/controllers/CustomizationController.java @@ -32,6 +32,9 @@ public class CustomizationController { public void submitCustomization() { System.out.println("Attempting to send"); socketThread.sendCustomizationRequest(CustomizeRequestType.NAME, nameField.getText().getBytes()); + // TODO: 16/08/17 ajm412: Turn colors into byte array. + socketThread.sendCustomizationRequest(CustomizeRequestType.COLOR, + boatColorPicker.getValue().toString().getBytes()); }