mirror of
https://github.com/michaelrausch/Party-Parrots-At-Sea.git
synced 2026-05-09 06:18:44 +00:00
Fixed merged conflicts with merge onto develop.
#bug
This commit is contained in:
@@ -7,7 +7,6 @@ import java.util.Map;
|
|||||||
import seng302.gameServer.server.messages.BoatAction;
|
import seng302.gameServer.server.messages.BoatAction;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import seng302.gameServer.server.messages.BoatActionType;
|
|
||||||
import seng302.model.Player;
|
import seng302.model.Player;
|
||||||
import seng302.model.Yacht;
|
import seng302.model.Yacht;
|
||||||
import seng302.model.mark.MarkOrder;
|
import seng302.model.mark.MarkOrder;
|
||||||
|
|||||||
@@ -10,11 +10,11 @@ import seng302.gameServer.server.messages.BoatAction;
|
|||||||
|
|
||||||
public class ServerPacketParser {
|
public class ServerPacketParser {
|
||||||
|
|
||||||
public static BoatActionType extractBoatAction(StreamPacket packet) {
|
public static BoatAction extractBoatAction(StreamPacket packet) {
|
||||||
byte[] payload = packet.getPayload();
|
byte[] payload = packet.getPayload();
|
||||||
int messageVersionNo = payload[0];
|
int messageVersionNo = payload[0];
|
||||||
long actionTypeValue = Message.bytesToLong(Arrays.copyOfRange(payload, 0, 1));
|
long actionTypeValue = Message.bytesToLong(Arrays.copyOfRange(payload, 0, 1));
|
||||||
return BoatActionType.getType((int) actionTypeValue);
|
return BoatAction.getType((int) actionTypeValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ClientType extractClientType(StreamPacket packet){
|
public static ClientType extractClientType(StreamPacket packet){
|
||||||
|
|||||||
@@ -1,16 +1,12 @@
|
|||||||
package seng302.gameServer;
|
package seng302.gameServer;
|
||||||
|
|
||||||
|
|
||||||
import seng302.gameServer.server.messages.*;
|
import java.io.BufferedReader;
|
||||||
import seng302.model.Player;
|
import java.io.ByteArrayOutputStream;
|
||||||
import seng302.model.Yacht;
|
import java.io.IOException;
|
||||||
import seng302.model.stream.packets.PacketType;
|
import java.io.InputStream;
|
||||||
import seng302.model.stream.packets.StreamPacket;
|
import java.io.InputStreamReader;
|
||||||
import seng302.model.stream.xml.generator.Race;
|
import java.io.OutputStream;
|
||||||
import seng302.model.stream.xml.generator.Regatta;
|
|
||||||
import seng302.utilities.XMLGenerator;
|
|
||||||
|
|
||||||
import java.io.*;
|
|
||||||
import java.net.Socket;
|
import java.net.Socket;
|
||||||
import java.net.SocketException;
|
import java.net.SocketException;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
@@ -22,6 +18,19 @@ import java.util.concurrent.ThreadLocalRandom;
|
|||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
import java.util.zip.CRC32;
|
import java.util.zip.CRC32;
|
||||||
import java.util.zip.Checksum;
|
import java.util.zip.Checksum;
|
||||||
|
import seng302.gameServer.server.messages.BoatAction;
|
||||||
|
import seng302.gameServer.server.messages.BoatLocationMessage;
|
||||||
|
import seng302.gameServer.server.messages.BoatStatus;
|
||||||
|
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.Player;
|
import seng302.model.Player;
|
||||||
import seng302.model.Yacht;
|
import seng302.model.Yacht;
|
||||||
import seng302.model.stream.packets.PacketType;
|
import seng302.model.stream.packets.PacketType;
|
||||||
@@ -29,16 +38,6 @@ import seng302.model.stream.packets.StreamPacket;
|
|||||||
import seng302.model.stream.xml.generator.Race;
|
import seng302.model.stream.xml.generator.Race;
|
||||||
import seng302.model.stream.xml.generator.Regatta;
|
import seng302.model.stream.xml.generator.Regatta;
|
||||||
import seng302.utilities.XMLGenerator;
|
import seng302.utilities.XMLGenerator;
|
||||||
import seng302.gameServer.server.messages.BoatAction;
|
|
||||||
import seng302.gameServer.server.messages.BoatLocationMessage;
|
|
||||||
import seng302.gameServer.server.messages.BoatStatus;
|
|
||||||
import seng302.gameServer.server.messages.BoatSubMessage;
|
|
||||||
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.XMLMessage;
|
|
||||||
import seng302.gameServer.server.messages.XMLMessageSubType;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A class describing a single connection to a Client for the purposes of sending and receiving on
|
* A class describing a single connection to a Client for the purposes of sending and receiving on
|
||||||
@@ -201,7 +200,7 @@ public class ServerToClientThread implements Runnable, Observer {
|
|||||||
//System.out.println("RECEIVED A PACKET");
|
//System.out.println("RECEIVED A PACKET");
|
||||||
switch (PacketType.assignPacketType(type, payload)) {
|
switch (PacketType.assignPacketType(type, payload)) {
|
||||||
case BOAT_ACTION:
|
case BOAT_ACTION:
|
||||||
BoatActionType actionType = ServerPacketParser
|
BoatAction actionType = ServerPacketParser
|
||||||
.extractBoatAction(
|
.extractBoatAction(
|
||||||
new StreamPacket(type, payloadLength, timeStamp, payload));
|
new StreamPacket(type, payloadLength, timeStamp, payload));
|
||||||
GameState.updateBoat(sourceId, actionType);
|
GameState.updateBoat(sourceId, actionType);
|
||||||
|
|||||||
@@ -18,9 +18,17 @@ import java.util.zip.Checksum;
|
|||||||
import javafx.application.Platform;
|
import javafx.application.Platform;
|
||||||
import javafx.scene.control.Alert;
|
import javafx.scene.control.Alert;
|
||||||
import javafx.scene.control.Alert.AlertType;
|
import javafx.scene.control.Alert.AlertType;
|
||||||
import seng302.model.stream.packets.StreamPacket;
|
import javafx.scene.control.ButtonType;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
import seng302.gameServer.server.messages.BoatAction;
|
||||||
import seng302.gameServer.server.messages.BoatActionMessage;
|
import seng302.gameServer.server.messages.BoatActionMessage;
|
||||||
|
import seng302.gameServer.server.messages.ClientType;
|
||||||
import seng302.gameServer.server.messages.Message;
|
import seng302.gameServer.server.messages.Message;
|
||||||
|
import seng302.gameServer.server.messages.RegistrationRequestMessage;
|
||||||
|
import seng302.gameServer.server.messages.RegistrationResponseStatus;
|
||||||
|
import seng302.model.stream.packets.PacketType;
|
||||||
|
import seng302.model.stream.packets.StreamPacket;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A class describing a single connection to a Server for the purposes of sending and receiving on
|
* A class describing a single connection to a Server for the purposes of sending and receiving on
|
||||||
|
|||||||
@@ -14,8 +14,6 @@ import javafx.scene.input.KeyEvent;
|
|||||||
import javafx.scene.layout.Pane;
|
import javafx.scene.layout.Pane;
|
||||||
import seng302.gameServer.MainServerThread;
|
import seng302.gameServer.MainServerThread;
|
||||||
import seng302.gameServer.server.messages.BoatAction;
|
import seng302.gameServer.server.messages.BoatAction;
|
||||||
import seng302.gameServer.server.messages.BoatActionMessage;
|
|
||||||
import seng302.gameServer.server.messages.BoatActionType;
|
|
||||||
import seng302.model.RaceState;
|
import seng302.model.RaceState;
|
||||||
import seng302.model.Yacht;
|
import seng302.model.Yacht;
|
||||||
import seng302.model.stream.packets.StreamPacket;
|
import seng302.model.stream.packets.StreamPacket;
|
||||||
@@ -32,7 +30,8 @@ import seng302.visualiser.controllers.LobbyController.CloseStatus;
|
|||||||
import seng302.visualiser.controllers.RaceViewController;
|
import seng302.visualiser.controllers.RaceViewController;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Created by cir27 on 20/07/17.
|
* This class is a client side instance of a yacht racing game in JavaFX. The game is instantiated
|
||||||
|
* with a JavaFX Pane to insert itself into.
|
||||||
*/
|
*/
|
||||||
public class GameClient {
|
public class GameClient {
|
||||||
|
|
||||||
@@ -49,10 +48,20 @@ public class GameClient {
|
|||||||
|
|
||||||
private ObservableList<String> clientLobbyList = FXCollections.observableArrayList();
|
private ObservableList<String> clientLobbyList = FXCollections.observableArrayList();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create an instance of the game client. Does not do anything untill run with runAsClient()
|
||||||
|
* runAsHost().
|
||||||
|
* @param holder The JavaFX Pane that the visual elements for the race will be inserted into.
|
||||||
|
*/
|
||||||
public GameClient(Pane holder) {
|
public GameClient(Pane holder) {
|
||||||
this.holderPane = holder;
|
this.holderPane = holder;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Connect to a game at the given address and starts the visualiser.
|
||||||
|
* @param ipAddress IP to connect to.
|
||||||
|
* @param portNumber Port to connect to.
|
||||||
|
*/
|
||||||
public void runAsClient(String ipAddress, Integer portNumber) {
|
public void runAsClient(String ipAddress, Integer portNumber) {
|
||||||
try {
|
try {
|
||||||
socketThread = new ClientToServerThread(ipAddress, portNumber);
|
socketThread = new ClientToServerThread(ipAddress, portNumber);
|
||||||
@@ -69,6 +78,11 @@ public class GameClient {
|
|||||||
lobbyController.addCloseListener((exitCause) -> this.loadStartScreen());
|
lobbyController.addCloseListener((exitCause) -> this.loadStartScreen());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Connect to a game as the host at the given address and starts the visualiser.
|
||||||
|
* @param ipAddress IP to connect to.
|
||||||
|
* @param portNumber Port to connect to.
|
||||||
|
*/
|
||||||
public void runAsHost(String ipAddress, Integer portNumber) {
|
public void runAsHost(String ipAddress, Integer portNumber) {
|
||||||
server = new MainServerThread();
|
server = new MainServerThread();
|
||||||
try {
|
try {
|
||||||
|
|||||||
@@ -15,7 +15,6 @@ import seng302.visualiser.ClientToServerThread;
|
|||||||
/**
|
/**
|
||||||
* Test for checking how regularly packets are sent from ClientToServer Thread.
|
* Test for checking how regularly packets are sent from ClientToServer Thread.
|
||||||
*/
|
*/
|
||||||
//@FixMethodOrder(MethodSorters.NAME_ASCENDING)
|
|
||||||
public class RegularPacketsTest {
|
public class RegularPacketsTest {
|
||||||
|
|
||||||
private MainServerThread serverThread;
|
private MainServerThread serverThread;
|
||||||
@@ -30,7 +29,7 @@ public class RegularPacketsTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void Test1PacketsSentAtRegularIntervals () throws Exception {
|
public void packetsSentAtRegularIntervals () throws Exception {
|
||||||
final double TEST_DISTANCE = 10.0;
|
final double TEST_DISTANCE = 10.0;
|
||||||
serverThread.startGame();
|
serverThread.startGame();
|
||||||
SleepThreadMaxDelay();
|
SleepThreadMaxDelay();
|
||||||
@@ -51,7 +50,7 @@ public class RegularPacketsTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void Test2ArbitraryPacketSentOnRelease() throws Exception {
|
public void testArbitraryPacketSent() throws Exception {
|
||||||
serverThread.startGame();
|
serverThread.startGame();
|
||||||
SleepThreadMaxDelay();
|
SleepThreadMaxDelay();
|
||||||
Yacht yacht = new ArrayList<>(GameState.getYachts().values()).get(0);
|
Yacht yacht = new ArrayList<>(GameState.getYachts().values()).get(0);
|
||||||
@@ -61,21 +60,6 @@ public class RegularPacketsTest {
|
|||||||
Assert.assertEquals(startState, !yacht.getSailIn());
|
Assert.assertEquals(startState, !yacht.getSailIn());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
|
||||||
public void Test3ArbitraryPacketSentOnPress() throws Exception {
|
|
||||||
serverThread.startGame();
|
|
||||||
SleepThreadMaxDelay();
|
|
||||||
Yacht yacht = new ArrayList<>(GameState.getYachts().values()).get(0);
|
|
||||||
double heading = yacht.getHeading();
|
|
||||||
double windDirection = GameState.getWindDirection();
|
|
||||||
Yacht testYacht = new Yacht("", 0, "", "", "", "");
|
|
||||||
testYacht.setHeading(heading);
|
|
||||||
testYacht.tackGybe(windDirection);
|
|
||||||
clientThread.sendBoatAction(BoatAction.TACK_GYBE);
|
|
||||||
SleepThreadMaxDelay();
|
|
||||||
Assert.assertEquals(testYacht.getHeading(), yacht.getHeading(), 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Give time for processing and packet sending. 200ms listed as absolute maximum for an
|
* Give time for processing and packet sending. 200ms listed as absolute maximum for an
|
||||||
* acceptable delay.
|
* acceptable delay.
|
||||||
@@ -90,7 +74,7 @@ public class RegularPacketsTest {
|
|||||||
serverThread.terminate();
|
serverThread.terminate();
|
||||||
clientThread.setSocketToClose();
|
clientThread.setSocketToClose();
|
||||||
GameState.setCurrentStage(GameStages.LOBBYING);
|
GameState.setCurrentStage(GameStages.LOBBYING);
|
||||||
|
for (int i = 0; i<6; i++)
|
||||||
SleepThreadMaxDelay(); //Make sure socket is closed.
|
SleepThreadMaxDelay(); //Make sure socket is closed.
|
||||||
SleepThreadMaxDelay();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user