mirror of
https://github.com/michaelrausch/Party-Parrots-At-Sea.git
synced 2026-05-09 06:18:44 +00:00
Merge remote-tracking branch 'origin/Story1055_Send_Race_Status_When_Host_Ready' into develop
# Conflicts: # src/main/java/seng302/controllers/LobbyController.java
This commit is contained in:
@@ -215,6 +215,11 @@ public class ClientPacketParser {
|
|||||||
clientBoat.setEstimateTimeAtNextMark(estTimeAtNextMark);
|
clientBoat.setEstimateTimeAtNextMark(estTimeAtNextMark);
|
||||||
clientBoat.setEstimateTimeAtFinish(estTimeAtFinish);
|
clientBoat.setEstimateTimeAtFinish(estTimeAtFinish);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 3 is race started
|
||||||
|
if (raceStatus == 3) {
|
||||||
|
ClientState.setRaceStarted(true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void setBoatLegPosition(Yacht updatingBoat, Integer leg){
|
private static void setBoatLegPosition(Yacht updatingBoat, Integer leg){
|
||||||
|
|||||||
@@ -15,10 +15,6 @@ public class ClientStateQueryingRunnable extends Observable implements Runnable
|
|||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
while(!terminate) {
|
while(!terminate) {
|
||||||
// if (ClientState.isRaceStarted() && ClientState.isConnectedToHost()) {
|
|
||||||
// setChanged();
|
|
||||||
// notifyObservers();
|
|
||||||
// }
|
|
||||||
// Sleeping the thread so it will respond to the if statement below
|
// Sleeping the thread so it will respond to the if statement below
|
||||||
// if you know a better fix, pls tell me :) -ryan
|
// if you know a better fix, pls tell me :) -ryan
|
||||||
try {
|
try {
|
||||||
@@ -26,9 +22,16 @@ public class ClientStateQueryingRunnable extends Observable implements Runnable
|
|||||||
} catch (InterruptedException e) {
|
} catch (InterruptedException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (ClientState.isRaceStarted() && ClientState.isConnectedToHost()) {
|
||||||
|
setChanged();
|
||||||
|
notifyObservers("game started");
|
||||||
|
terminate();
|
||||||
|
}
|
||||||
|
|
||||||
if (ClientState.isDirtyState()) {
|
if (ClientState.isDirtyState()) {
|
||||||
setChanged();
|
setChanged();
|
||||||
notifyObservers();
|
notifyObservers("update players");
|
||||||
ClientState.setDirtyState(false);
|
ClientState.setDirtyState(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -95,11 +95,9 @@ public class ClientToServerThread implements Runnable {
|
|||||||
// TODO: 17/07/17 wmu16 - Fix this or maybe we dont need to go through the main server at all!?!?
|
// TODO: 17/07/17 wmu16 - Fix this or maybe we dont need to go through the main server at all!?!?
|
||||||
// packetBufferDelegate.addToBuffer(new StreamPacket(type, payloadLength, timeStamp, payload));
|
// packetBufferDelegate.addToBuffer(new StreamPacket(type, payloadLength, timeStamp, payload));
|
||||||
} else {
|
} else {
|
||||||
System.err.println("Packet has been dropped");
|
clientLog("Packet has been dropped", 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
closeSocket();
|
closeSocket();
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ import javafx.collections.ObservableList;
|
|||||||
import javafx.fxml.FXML;
|
import javafx.fxml.FXML;
|
||||||
import javafx.fxml.FXMLLoader;
|
import javafx.fxml.FXMLLoader;
|
||||||
import javafx.fxml.Initializable;
|
import javafx.fxml.Initializable;
|
||||||
|
import javafx.scene.control.Button;
|
||||||
import javafx.scene.control.ListView;
|
import javafx.scene.control.ListView;
|
||||||
import javafx.scene.image.Image;
|
import javafx.scene.image.Image;
|
||||||
import javafx.scene.image.ImageView;
|
import javafx.scene.image.ImageView;
|
||||||
@@ -27,19 +28,20 @@ import seng302.client.ClientState;
|
|||||||
import seng302.client.ClientStateQueryingRunnable;
|
import seng302.client.ClientStateQueryingRunnable;
|
||||||
import seng302.gameServer.GameStages;
|
import seng302.gameServer.GameStages;
|
||||||
import seng302.gameServer.GameState;
|
import seng302.gameServer.GameState;
|
||||||
|
import seng302.gameServer.MainServerThread;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A class describing the actions of the lobby screen
|
* A class describing the actions of the lobby screen
|
||||||
* Created by wmu16 on 10/07/17.
|
* Created by wmu16 on 10/07/17.
|
||||||
*/
|
*/
|
||||||
public class LobbyController implements Initializable, Observer{
|
public class LobbyController implements Initializable, Observer{
|
||||||
|
|
||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
private GridPane lobbyScreen;
|
private GridPane lobbyScreen;
|
||||||
@FXML
|
@FXML
|
||||||
private Text lobbyIpText;
|
private Text lobbyIpText;
|
||||||
@FXML
|
@FXML
|
||||||
|
private Button readyButton;
|
||||||
|
@FXML
|
||||||
private ListView firstListView;
|
private ListView firstListView;
|
||||||
@FXML
|
@FXML
|
||||||
private ListView secondListView;
|
private ListView secondListView;
|
||||||
@@ -83,6 +85,9 @@ public class LobbyController implements Initializable, Observer{
|
|||||||
private static ObservableList<String> eighthCompetitor = FXCollections.observableArrayList();
|
private static ObservableList<String> eighthCompetitor = FXCollections.observableArrayList();
|
||||||
private ClientStateQueryingRunnable clientStateQueryingRunnable;
|
private ClientStateQueryingRunnable clientStateQueryingRunnable;
|
||||||
|
|
||||||
|
private Boolean switchedPane = false;
|
||||||
|
private MainServerThread mainServerThread;
|
||||||
|
|
||||||
private void setContentPane(String jfxUrl) {
|
private void setContentPane(String jfxUrl) {
|
||||||
try {
|
try {
|
||||||
AnchorPane contentPane = (AnchorPane) lobbyScreen.getParent();
|
AnchorPane contentPane = (AnchorPane) lobbyScreen.getParent();
|
||||||
@@ -100,10 +105,14 @@ public class LobbyController implements Initializable, Observer{
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void initialize(URL location, ResourceBundle resources) {
|
public void initialize(URL location, ResourceBundle resources) {
|
||||||
if (ClientState.isHost())
|
if (ClientState.isHost()) {
|
||||||
lobbyIpText.setText("Lobby Host IP: " + ClientState.getHostIp());
|
lobbyIpText.setText("Lobby Host IP: " + ClientState.getHostIp());
|
||||||
else
|
readyButton.setDisable(false);
|
||||||
|
}
|
||||||
|
else {
|
||||||
lobbyIpText.setText("Connected to IP: ");
|
lobbyIpText.setText("Connected to IP: ");
|
||||||
|
readyButton.setDisable(true);
|
||||||
|
}
|
||||||
initialiseListView();
|
initialiseListView();
|
||||||
// initialiseLobbyControllerThread();
|
// initialiseLobbyControllerThread();
|
||||||
// initialiseImageView(); // parrot gif init
|
// initialiseImageView(); // parrot gif init
|
||||||
@@ -122,9 +131,12 @@ public class LobbyController implements Initializable, Observer{
|
|||||||
Platform.runLater(new Runnable() {
|
Platform.runLater(new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
// switchToRaceView();
|
if (arg.equals("game started") && !switchedPane) {
|
||||||
|
switchToRaceView();
|
||||||
|
}
|
||||||
|
if (arg.equals(("update players"))) {
|
||||||
initialiseListView();
|
initialiseListView();
|
||||||
// clientStateQueryingRunnable.terminate();
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -161,8 +173,6 @@ public class LobbyController implements Initializable, Observer{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
firstListView.setItems(firstCompetitor);
|
firstListView.setItems(firstCompetitor);
|
||||||
secondListView.setItems(secondCompetitor);
|
secondListView.setItems(secondCompetitor);
|
||||||
thirdListView.setItems(thirdCompetitor);
|
thirdListView.setItems(thirdCompetitor);
|
||||||
@@ -218,9 +228,10 @@ public class LobbyController implements Initializable, Observer{
|
|||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
public void readyButtonPressed() {
|
public void readyButtonPressed() {
|
||||||
|
// setContentPane("/views/RaceView.fxml");
|
||||||
playTheme();
|
playTheme();
|
||||||
setContentPane("/views/RaceView.fxml");
|
|
||||||
GameState.setCurrentStage(GameStages.RACING);
|
GameState.setCurrentStage(GameStages.RACING);
|
||||||
|
mainServerThread.startGame();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -242,6 +253,13 @@ public class LobbyController implements Initializable, Observer{
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void switchToRaceView() {
|
private void switchToRaceView() {
|
||||||
|
if (!switchedPane) {
|
||||||
|
switchedPane = true;
|
||||||
setContentPane("/views/RaceView.fxml");
|
setContentPane("/views/RaceView.fxml");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setMainServerThread(MainServerThread mainServerThread) {
|
||||||
|
this.mainServerThread = mainServerThread;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -72,14 +72,15 @@ public class StartScreenController {
|
|||||||
String ipAddress = InetAddress.getLocalHost().getHostAddress();
|
String ipAddress = InetAddress.getLocalHost().getHostAddress();
|
||||||
// get the lobby controller so that we can pass the game server thread to it
|
// get the lobby controller so that we can pass the game server thread to it
|
||||||
new GameState(getLocalHostIp());
|
new GameState(getLocalHostIp());
|
||||||
new MainServerThread();
|
MainServerThread mainServerThread = new MainServerThread();
|
||||||
ClientState.setHost(true);
|
ClientState.setHost(true);
|
||||||
// host will connect and handshake to itself after setting up the server
|
// host will connect and handshake to itself after setting up the server
|
||||||
// TODO: 24/07/17 wmu16 - Make port number some static global type constant?
|
// TODO: 24/07/17 wmu16 - Make port number some static global type constant?
|
||||||
ClientToServerThread clientToServerThread = new ClientToServerThread(ClientState.getHostIp(), 4942);
|
ClientToServerThread clientToServerThread = new ClientToServerThread(ClientState.getHostIp(), 4942);
|
||||||
ClientState.setConnectedToHost(true);
|
ClientState.setConnectedToHost(true);
|
||||||
controller.setClientToServerThread(clientToServerThread);
|
controller.setClientToServerThread(clientToServerThread);
|
||||||
setContentPane("/views/LobbyView.fxml");
|
LobbyController lobbyController = (LobbyController) setContentPane("/views/LobbyView.fxml");
|
||||||
|
lobbyController.setMainServerThread(mainServerThread);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
Alert alert = new Alert(AlertType.ERROR);
|
Alert alert = new Alert(AlertType.ERROR);
|
||||||
alert.setHeaderText("Cannot host");
|
alert.setHeaderText("Cannot host");
|
||||||
|
|||||||
@@ -99,9 +99,6 @@ public class MainServerThread extends Observable implements Runnable, PacketBuff
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public void updateClients() {
|
public void updateClients() {
|
||||||
for (ServerToClientThread serverToClientThread : serverToClientThreads) {
|
for (ServerToClientThread serverToClientThread : serverToClientThreads) {
|
||||||
serverToClientThread.updateClient();
|
serverToClientThread.updateClient();
|
||||||
@@ -146,4 +143,9 @@ public class MainServerThread extends Observable implements Runnable, PacketBuff
|
|||||||
// sendXml();
|
// sendXml();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void startGame() {
|
||||||
|
for (ServerToClientThread serverToClientThread : serverToClientThreads) {
|
||||||
|
serverToClientThread.sendRaceStatusMessage();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import java.io.InputStream;
|
|||||||
import java.io.OutputStream;
|
import java.io.OutputStream;
|
||||||
import java.net.Socket;
|
import java.net.Socket;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Observable;
|
import java.util.Observable;
|
||||||
import java.util.Observer;
|
import java.util.Observer;
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
@@ -22,12 +23,18 @@ import seng302.models.xml.Regatta;
|
|||||||
import seng302.models.xml.XMLGenerator;
|
import seng302.models.xml.XMLGenerator;
|
||||||
import seng302.server.messages.BoatActionType;
|
import seng302.server.messages.BoatActionType;
|
||||||
import seng302.server.messages.BoatLocationMessage;
|
import seng302.server.messages.BoatLocationMessage;
|
||||||
|
import seng302.server.messages.BoatStatus;
|
||||||
|
import seng302.server.messages.BoatSubMessage;
|
||||||
import seng302.server.messages.Message;
|
import seng302.server.messages.Message;
|
||||||
|
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
import java.net.Socket;
|
import java.net.Socket;
|
||||||
import java.util.zip.CRC32;
|
import java.util.zip.CRC32;
|
||||||
import java.util.zip.Checksum;
|
import java.util.zip.Checksum;
|
||||||
|
import seng302.server.messages.RaceStatus;
|
||||||
|
import seng302.server.messages.RaceStatusMessage;
|
||||||
|
import seng302.server.messages.RaceType;
|
||||||
|
import seng302.server.messages.WindDirection;
|
||||||
import seng302.server.messages.XMLMessage;
|
import seng302.server.messages.XMLMessage;
|
||||||
import seng302.server.messages.XMLMessageSubType;
|
import seng302.server.messages.XMLMessageSubType;
|
||||||
import seng302.server.messages.XMLMessage;
|
import seng302.server.messages.XMLMessage;
|
||||||
@@ -171,6 +178,8 @@ public class ServerToClientThread implements Runnable, Observer {
|
|||||||
// message = new XMLMessage(xml, XMLMessageSubType.BOAT, 0);
|
// message = new XMLMessage(xml, XMLMessageSubType.BOAT, 0);
|
||||||
// sendMessage(message);
|
// sendMessage(message);
|
||||||
// System.out.println("[server] send message 4 " + message);
|
// System.out.println("[server] send message 4 " + message);
|
||||||
|
// sendMessage(getRaceStatusMessage());
|
||||||
|
// System.out.println("sent race status");
|
||||||
//-------
|
//-------
|
||||||
|
|
||||||
while(true) {
|
while(true) {
|
||||||
@@ -221,7 +230,7 @@ public class ServerToClientThread implements Runnable, Observer {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
System.err.println("Packet has been dropped");
|
serverLog("Packet has been dropped", 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
@@ -366,10 +375,42 @@ public class ServerToClientThread implements Runnable, Observer {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public Thread getThread() {
|
public Thread getThread() {
|
||||||
return thread;
|
return thread;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void sendRaceStatusMessage(){
|
||||||
|
// variables taken from GameServerThread
|
||||||
|
int TIME_TILL_RACE_START = 20*1000;
|
||||||
|
long startTime = System.currentTimeMillis() + TIME_TILL_RACE_START;
|
||||||
|
|
||||||
|
List<BoatSubMessage> boatSubMessages = new ArrayList<>();
|
||||||
|
BoatStatus boatStatus;
|
||||||
|
RaceStatus raceStatus;
|
||||||
|
|
||||||
|
for (Player player : GameState.getPlayers()){
|
||||||
|
Yacht y = player.getYacht();
|
||||||
|
|
||||||
|
if (GameState.getCurrentStage() == GameStages.PRE_RACE){
|
||||||
|
boatStatus = BoatStatus.PRESTART;
|
||||||
|
}
|
||||||
|
else if(GameState.getCurrentStage() == GameStages.RACING){
|
||||||
|
boatStatus = BoatStatus.RACING;
|
||||||
|
} else {
|
||||||
|
boatStatus = BoatStatus.UNDEFINED;
|
||||||
|
}
|
||||||
|
|
||||||
|
BoatSubMessage m = new BoatSubMessage(y.getSourceId(), boatStatus, 0, 0, 0, 1234l, 1234l);
|
||||||
|
boatSubMessages.add(m);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (GameState.getCurrentStage() == GameStages.RACING){
|
||||||
|
raceStatus = RaceStatus.STARTED;
|
||||||
|
} else {
|
||||||
|
raceStatus = RaceStatus.WARNING;
|
||||||
|
}
|
||||||
|
|
||||||
|
sendMessage(new RaceStatusMessage(1, raceStatus, startTime, WindDirection.SOUTH,
|
||||||
|
100, GameState.getPlayers().size(), RaceType.MATCH_RACE, 1, boatSubMessages));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -38,7 +38,7 @@
|
|||||||
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
|
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
|
||||||
</rowConstraints>
|
</rowConstraints>
|
||||||
<children>
|
<children>
|
||||||
<Button focusTraversable="false" mnemonicParsing="false" onAction="#readyButtonPressed" prefWidth="101.0" text="Ready" GridPane.halignment="CENTER" />
|
<Button fx:id="readyButton" focusTraversable="false" mnemonicParsing="false" onAction="#readyButtonPressed" prefWidth="101.0" text="Ready" GridPane.halignment="CENTER" />
|
||||||
<Button focusTraversable="false" mnemonicParsing="false" onAction="#leaveLobbyButtonPressed" text="Leave Lobby" GridPane.columnIndex="1" GridPane.halignment="CENTER" />
|
<Button focusTraversable="false" mnemonicParsing="false" onAction="#leaveLobbyButtonPressed" text="Leave Lobby" GridPane.columnIndex="1" GridPane.halignment="CENTER" />
|
||||||
</children>
|
</children>
|
||||||
</GridPane>
|
</GridPane>
|
||||||
|
|||||||
Reference in New Issue
Block a user