From e4dbbd05c7eff000bf31c847a86bd90b99ab3183 Mon Sep 17 00:00:00 2001 From: Calum Date: Mon, 4 Sep 2017 23:42:10 +1200 Subject: [PATCH] Merged with remote changes --- .../seng302/gameServer/HeartbeatThread.java | 27 ++++--- .../java/seng302/visualiser/GameClient.java | 3 - .../controllers/RaceViewController.java | 2 - .../visualiser/fxObjects/ChatHistory.java | 15 +++- src/test/java/features/SendChat.feature | 2 +- .../gameServer/server/ChatCommandsTest.java | 77 ++++++++++++++----- src/test/java/steps/SendChatSteps.java | 14 +--- 7 files changed, 86 insertions(+), 54 deletions(-) diff --git a/src/main/java/seng302/gameServer/HeartbeatThread.java b/src/main/java/seng302/gameServer/HeartbeatThread.java index b9367134..970a7ef4 100644 --- a/src/main/java/seng302/gameServer/HeartbeatThread.java +++ b/src/main/java/seng302/gameServer/HeartbeatThread.java @@ -44,20 +44,23 @@ public class HeartbeatThread implements Runnable { * The delegate is notified if a player has disconnected */ private void sendHeartbeatToAllPlayers(){ - Message heartbeat = new Heartbeat(seqNum); - for (Player player : GameState.getPlayers()){ - if (!player.getSocket().isConnected()) { - playerLostConnection(player); - } - - try { - player.getSocket().getOutputStream().write(heartbeat.getBuffer()); - } catch (IOException e) { - playerLostConnection(player); + try { + Message heartbeat = new Heartbeat(seqNum); + for (Player player : GameState.getPlayers()) { + if (!player.getSocket().isConnected()) { + playerLostConnection(player); + } + try { + player.getSocket().getOutputStream().write(heartbeat.getBuffer()); + } catch (IOException e) { + playerLostConnection(player); + } } + updateDelegate(); + seqNum++; + } catch (NullPointerException ne) { + // TODO: 4/09/17 Just ignoring this at the moment. Caused by players getting removed elsewhere. } - updateDelegate(); - seqNum++; } /** diff --git a/src/main/java/seng302/visualiser/GameClient.java b/src/main/java/seng302/visualiser/GameClient.java index 91c00a0c..7c972a6c 100644 --- a/src/main/java/seng302/visualiser/GameClient.java +++ b/src/main/java/seng302/visualiser/GameClient.java @@ -234,7 +234,6 @@ public class GameClient { private void parsePackets() { while (socketThread.getPacketQueue().peek() != null) { - System.out.println("PARSING PACKET"); StreamPacket packet = socketThread.getPacketQueue().poll(); switch (packet.getType()) { case RACE_STATUS: @@ -298,8 +297,6 @@ public class GameClient { case CHATTER_TEXT: Pair playerIdMessagePair = StreamParser .extractChatterText(packet); - - System.out.println("playerIdMessagePair = " + playerIdMessagePair); raceView.updateChatHistory( allBoatsMap.get(playerIdMessagePair.getKey()).getColour(), playerIdMessagePair.getValue() diff --git a/src/main/java/seng302/visualiser/controllers/RaceViewController.java b/src/main/java/seng302/visualiser/controllers/RaceViewController.java index 00ea7f37..ca3d9cb8 100644 --- a/src/main/java/seng302/visualiser/controllers/RaceViewController.java +++ b/src/main/java/seng302/visualiser/controllers/RaceViewController.java @@ -574,7 +574,6 @@ public class RaceViewController extends Thread implements ImportantAnnotationDel yachtSelectionComboBox.setItems( FXCollections.observableArrayList(participants.values()) ); - //Null check is if the listener is fired but nothing selected yachtSelectionComboBox.valueProperty().addListener((obs, lastSelection, selectedBoat) -> { if (selectedBoat != null) { gameView.selectBoat(selectedBoat); @@ -677,7 +676,6 @@ public class RaceViewController extends Thread implements ImportantAnnotationDel } public void updateChatHistory(Paint playerColour, String newMessage) { -// Platform.runLater(() -> chatHistory.appendText(newMessage + "\n\n")); Platform.runLater(() -> chatHistory.addMessage(playerColour, newMessage)); } diff --git a/src/main/java/seng302/visualiser/fxObjects/ChatHistory.java b/src/main/java/seng302/visualiser/fxObjects/ChatHistory.java index 3354f72b..c8f14c62 100644 --- a/src/main/java/seng302/visualiser/fxObjects/ChatHistory.java +++ b/src/main/java/seng302/visualiser/fxObjects/ChatHistory.java @@ -24,9 +24,18 @@ public class ChatHistory extends ScrollPane { this.setMaxWidth(Double.MAX_VALUE); this.setVbarPolicy(ScrollBarPolicy.ALWAYS); this.setHbarPolicy(ScrollBarPolicy.NEVER); - textFlow.getChildren().addListener((ListChangeListener) c -> { - this.setVvalue(1.0); - }); + //This makes the window auto scroll. + textFlow.getChildren().addListener((ListChangeListener) c -> + this.setVvalue(1.0) + ); + //This just makes it so that the ChatHistory is on focus it passes it off to the parent. + this.parentProperty().addListener((obs, old, parent) -> + this.focusedProperty().addListener((obsVal, oldVal, onFocus) -> { + if (onFocus) { + parent.requestFocus(); + } + }) + ); } /** diff --git a/src/test/java/features/SendChat.feature b/src/test/java/features/SendChat.feature index 7f4a66d2..5eff2da7 100644 --- a/src/test/java/features/SendChat.feature +++ b/src/test/java/features/SendChat.feature @@ -2,4 +2,4 @@ Feature: SendChat Scenario: User send chat to another client Given The are two games running When the user has pressed sends the message "Hello world" in a text box - Then the other client should recieve the message "Hello world" \ No newline at end of file + Then the other client should receive the message "Hello world" diff --git a/src/test/java/seng302/gameServer/server/ChatCommandsTest.java b/src/test/java/seng302/gameServer/server/ChatCommandsTest.java index 50db02e9..16e51f2c 100644 --- a/src/test/java/seng302/gameServer/server/ChatCommandsTest.java +++ b/src/test/java/seng302/gameServer/server/ChatCommandsTest.java @@ -26,6 +26,11 @@ public class ChatCommandsTest { @Test public void sendFinishAsHost () { + try { + Thread.sleep(1000); + } catch (InterruptedException ie) { + ie.printStackTrace(); + } try { dcSent = false; new GameState("localhost"); @@ -39,6 +44,7 @@ public class ChatCommandsTest { RaceStatusData rsd = StreamParser.extractRaceStatus(packet); if (rsd.getBoatData().get(0)[4] == BoatStatus.FINISHED.getCode()) { mst.terminate(); + System.out.println("AY WE DID IT"); // host.setSocketToClose(); Assert.assertTrue(dcSent); } @@ -76,6 +82,11 @@ public class ChatCommandsTest { @Test public void sendSpeedAsHostValid () { + try { + Thread.sleep(1000); + } catch (InterruptedException ie) { + ie.printStackTrace(); + } new GameState("localhost"); mst = new MainServerThread(); host = null; @@ -97,6 +108,7 @@ public class ChatCommandsTest { ie.printStackTrace(); } Assert.assertEquals(5.0, GameState.getSpeedMultiplier(), 0.00001); + System.out.println("the thing " + GameState.getSpeedMultiplier()); mst.terminate(); // host.setSocketToClose(); try { @@ -111,6 +123,11 @@ public class ChatCommandsTest { @Test public void sendSpeedAsHostInvalid () { + try { + Thread.sleep(1000); + } catch (InterruptedException ie) { + ie.printStackTrace(); + } new GameState("localhost"); mst = new MainServerThread(); host = null; @@ -134,6 +151,7 @@ public class ChatCommandsTest { mst.terminate(); // host.setSocketToClose(); Assert.assertEquals(1.0, GameState.getSpeedMultiplier(), 0.00001); + System.out.println("value " + GameState.getSpeedMultiplier()); try { Thread.sleep(2000); } catch (InterruptedException ie) { @@ -143,10 +161,12 @@ public class ChatCommandsTest { @Test public void sendCommandAsClient () { - new GameState("localhost"); + try { + Thread.sleep(1000); + } catch (InterruptedException ie) { + ie.printStackTrace(); + } mst = new MainServerThread(); - host = null; - client = null; try { host = new ClientToServerThread("localhost", 4942); try { @@ -189,13 +209,28 @@ public class ChatCommandsTest { @Test public void receiveFinishedAsClient () { + try { + Thread.sleep(1000); + } catch (InterruptedException ie) { + ie.printStackTrace(); + } new GameState("localhost"); dcSent = false; mst = new MainServerThread(); host = null; try { host = new ClientToServerThread("localhost", 4942); + try { + Thread.sleep(100); + } catch (InterruptedException ie) { + ie.printStackTrace(); + } client = new ClientToServerThread("localhost", 4942); + try { + Thread.sleep(100); + } catch (InterruptedException ie) { + ie.printStackTrace(); + } client.addStreamObserver(() -> { while (client.getPacketQueue().peek() != null) { StreamPacket packet = client.getPacketQueue().poll(); @@ -204,6 +239,7 @@ public class ChatCommandsTest { RaceStatusData rsd = StreamParser.extractRaceStatus(packet); if (rsd.getBoatData().get(0)[4] == BoatStatus.FINISHED.getCode()) { mst.terminate(); + System.out.println("TEST COMPLETE"); // client.setSocketToClose(); // host.setSocketToClose(); Assert.assertTrue(dcSent); @@ -217,25 +253,26 @@ public class ChatCommandsTest { } catch (IOException ioe) { ioe.printStackTrace(); } - try { - Thread.sleep(100); - } catch (InterruptedException ie) { - ie.printStackTrace(); - } - mst.startGame(); - try { - Thread.sleep(100); - } catch (InterruptedException ie) { - ie.printStackTrace(); - } +// try { +// Thread.sleep(100); +// } catch (InterruptedException ie) { +// ie.printStackTrace(); +// } +// mst.startGame(); +// try { +// Thread.sleep(100); +// } catch (InterruptedException ie) { +// ie.printStackTrace(); +// } host.sendChatterMessage("[time_prefix] >finish"); dcSent = true; - try { - Thread.sleep(200); - } catch (InterruptedException ie) { - ie.printStackTrace(); - } -// host.setSocketToClose(); +// try { +// Thread.sleep(200); +// } catch (InterruptedException ie) { +// ie.printStackTrace(); +// } +//// host.setSocketToClose(); +// mst.terminate(); try { Thread.sleep(2000); } catch (InterruptedException ie) { diff --git a/src/test/java/steps/SendChatSteps.java b/src/test/java/steps/SendChatSteps.java index b99e6e22..c2b5b802 100644 --- a/src/test/java/steps/SendChatSteps.java +++ b/src/test/java/steps/SendChatSteps.java @@ -1,22 +1,10 @@ package steps; -import cucumber.api.PendingException; import cucumber.api.java.en.Given; import cucumber.api.java.en.Then; import cucumber.api.java.en.When; -import java.util.ArrayList; - -import javafx.scene.layout.Pane; -import org.junit.Assert; -import org.mockito.Mock; -import seng302.gameServer.GameStages; -import seng302.gameServer.GameState; import seng302.gameServer.MainServerThread; -import seng302.gameServer.messages.BoatAction; -import seng302.model.ServerYacht; -import seng302.visualiser.ClientToServerThread; import seng302.visualiser.GameClient; -import seng302.visualiser.controllers.StartScreenController; /** * Created by kre39 on 7/08/17. @@ -44,7 +32,7 @@ public class SendChatSteps { // client1.getSocketThread().sendChatterMessage(arg1); } - @Then("^the other client should recieve the message \"([^\"]*)\"$") + @Then("^the other client should receive the message \"([^\"]*)\"$") public void the_other_client_should_recieve_the_message(String arg1) throws Throwable { // System.out.println(client2.getPacketQueue()); // client2.setSocketToClose();