Host also can be it's own client.

The host can connect to itself to become a client, packets are also sending from the host to client, update method should be ready to fully implemented. Added chatter packets to packet types to be used mostly for testing but can be further implemented for proper use in the future.

#story[1055]
This commit is contained in:
Kusal Ekanayake
2017-07-20 13:53:53 +12:00
parent 1e80d76acd
commit b1575e57df
10 changed files with 82 additions and 14 deletions
@@ -60,7 +60,6 @@ public class ClientToServerThread extends Thread {
// } // }
updateClient = false; updateClient = false;
} }
crcBuffer = new ByteArrayOutputStream(); crcBuffer = new ByteArrayOutputStream();
sync1 = readByte(); sync1 = readByte();
sync2 = readByte(); sync2 = readByte();
@@ -103,5 +103,7 @@ public class LobbyController implements Initializable{
@FXML @FXML
public void readyButtonPressed() { public void readyButtonPressed() {
GameState.setCurrentStage(GameStages.RACING); GameState.setCurrentStage(GameStages.RACING);
setContentPane("/views/RaceView.fxml");
} }
} }
@@ -95,16 +95,16 @@ public class RaceViewController extends Thread implements ImportantAnnotationDel
raceSparkLine.getYAxis().setTranslateX(-5); raceSparkLine.getYAxis().setTranslateX(-5);
raceSparkLine.getYAxis().setAutoRanging(false); raceSparkLine.getYAxis().setAutoRanging(false);
sparklineYAxis.setTickMarkVisible(false); sparklineYAxis.setTickMarkVisible(false);
startingBoats = new ArrayList<>(StreamParser.getBoats().values()); //startingBoats = new ArrayList<>(StreamParser.getBoats().values());
includedCanvasController.setup(this); //includedCanvasController.setup(this);
includedCanvasController.initializeCanvas(); //includedCanvasController.initializeCanvas();
initializeUpdateTimer(); //initializeUpdateTimer();
initialiseFPSCheckBox(); //initialiseFPSCheckBox();
initialiseAnnotationSlider(); //initialiseAnnotationSlider();
initialiseBoatSelectionComboBox(); //initialiseBoatSelectionComboBox();
includedCanvasController.timer.start(); //includedCanvasController.timer.start();
selectAnnotationBtn.setOnAction(event -> loadSelectAnnotationView()); //selectAnnotationBtn.setOnAction(event -> loadSelectAnnotationView());
} }
@@ -40,7 +40,6 @@ public class StartScreenController {
contentPane.getStylesheets().add(getClass().getResource("/css/master.css").toString()); contentPane.getStylesheets().add(getClass().getResource("/css/master.css").toString());
FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource(jfxUrl)); FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource(jfxUrl));
contentPane.getChildren().addAll((Pane) fxmlLoader.load()); contentPane.getChildren().addAll((Pane) fxmlLoader.load());
return fxmlLoader.getController(); return fxmlLoader.getController();
} catch (javafx.fxml.LoadException e) { } catch (javafx.fxml.LoadException e) {
e.printStackTrace(); e.printStackTrace();
@@ -63,6 +62,10 @@ public class StartScreenController {
String ipAddress = InetAddress.getLocalHost().getHostAddress(); String ipAddress = InetAddress.getLocalHost().getHostAddress();
new GameState(ipAddress); new GameState(ipAddress);
new MainServerThread().start(); new MainServerThread().start();
ClientToServerThread clientToServerThread = new ClientToServerThread("localhost", 4950);
controller.setClientToServerThread(clientToServerThread);
clientToServerThread.start();
// new GameServerThread("Fuck you");
// 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
setContentPane("/views/LobbyView.fxml"); setContentPane("/views/LobbyView.fxml");
@@ -58,9 +58,10 @@ public class MainServerThread extends Thread implements PacketBufferDelegate, Cl
} }
//RACING //RACING
if (GameState.getCurrentStage() == GameStages.RACING) { if (GameState.getCurrentStage() == GameStages.RACING) {
updateClients();
} }
@@ -68,9 +69,9 @@ public class MainServerThread extends Thread implements PacketBufferDelegate, Cl
else if (GameState.getCurrentStage() == GameStages.FINISHED) { else if (GameState.getCurrentStage() == GameStages.FINISHED) {
} }
updateClients(); updateClients();
while (!packetBuffer.isEmpty()){ while (!packetBuffer.isEmpty()){
System.out.println("WHATUPPP"); System.out.println("WHATUPPP");
try { try {
@@ -114,6 +115,13 @@ public class MainServerThread extends Thread implements PacketBufferDelegate, Cl
return packetBuffer.add(streamPacket); return packetBuffer.add(streamPacket);
} }
private void initializeRace(){
for (ServerToClientThread serverToClientThread : serverToClientThreads) {
serverToClientThread.updateClient();
}
}
/** /**
* A client has tried to connect to the server * A client has tried to connect to the server
* @param serverToClientThread The player that connected * @param serverToClientThread The player that connected
@@ -5,6 +5,8 @@ import seng302.models.Player;
import seng302.models.stream.PacketBufferDelegate; import seng302.models.stream.PacketBufferDelegate;
import seng302.models.stream.StreamParser; import seng302.models.stream.StreamParser;
import seng302.models.stream.packets.StreamPacket; import seng302.models.stream.packets.StreamPacket;
import seng302.server.messages.ChatterMessage;
import seng302.server.messages.Heartbeat;
import seng302.server.messages.Message; import seng302.server.messages.Message;
import java.io.*; import java.io.*;
@@ -54,6 +56,9 @@ public class ServerToClientThread extends Thread {
//Perform a write if it is time to as delegated by the MainServerThread //Perform a write if it is time to as delegated by the MainServerThread
if (updateClient) { if (updateClient) {
// TODO: 13/07/17 wmu16 - Write out game state - some function that would write all appropriate messages to this output stream // TODO: 13/07/17 wmu16 - Write out game state - some function that would write all appropriate messages to this output stream
ChatterMessage chatterMessage = new ChatterMessage(4, 14, "Hello, it's me");
sendMessage(chatterMessage);
// try { // try {
// GameState.outputState(os); // GameState.outputState(os);
// } catch (IOException e) { // } catch (IOException e) {
@@ -62,9 +67,11 @@ public class ServerToClientThread extends Thread {
updateClient = false; updateClient = false;
} }
crcBuffer = new ByteArrayOutputStream(); crcBuffer = new ByteArrayOutputStream();
sync1 = readByte(); sync1 = readByte();
sync2 = readByte(); sync2 = readByte();
//checking if it is the start of the packet //checking if it is the start of the packet
if(sync1 == 0x47 && sync2 == 0x83) { if(sync1 == 0x47 && sync2 == 0x83) {
int type = readByte(); int type = readByte();
@@ -86,6 +93,7 @@ public class ServerToClientThread extends Thread {
} }
} }
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace();
closeSocket(); closeSocket();
return; return;
} }
@@ -162,4 +170,12 @@ public class ServerToClientThread extends Thread {
readByte(); readByte();
} }
} }
public void sendMessage(Message message){
try {
os.write(message.getBuffer());
} catch (IOException e) {
e.printStackTrace();
}
}
} }
@@ -123,6 +123,7 @@ public class StreamParser{
*/ */
private static void extractHeartBeat(StreamPacket packet) { private static void extractHeartBeat(StreamPacket packet) {
long heartbeat = bytesToLong(packet.getPayload()); long heartbeat = bytesToLong(packet.getPayload());
System.out.println("heartbeat = " + heartbeat);
} }
private static String getTimeZoneString() { private static String getTimeZoneString() {
@@ -354,6 +355,7 @@ public class StreamParser{
int messageType = payload[1]; int messageType = payload[1];
int length = payload[2]; int length = payload[2];
String message = new String(Arrays.copyOfRange(payload, 3, 3 + length)); String message = new String(Arrays.copyOfRange(payload, 3, 3 + length));
System.out.println(message);
} }
/** /**
@@ -29,4 +29,5 @@ public class BoatActionMessage extends Message{
return MESSAGE_SIZE; return MESSAGE_SIZE;
} }
} }
@@ -0,0 +1,38 @@
package seng302.server.messages;
/**
* Created by kre39 on 20/07/17.
*/
public class ChatterMessage extends Message {
private final long MESSAGE_VERSION_NUMBER = 1;
private final int MESSAGE_SIZE = 3;
private int message_type;
private int message_size = 21;
private String message;
public ChatterMessage(int message_type, int message_size, String message) {
this.message_type = message_type;
this.message_size = message_size;
this.message = message;
setHeader(new Header(MessageType.CHATTER_TEXT, 1, (short) getSize()));
allocateBuffer();
writeHeaderToBuffer();
putByte((byte) MESSAGE_VERSION_NUMBER);
putInt(message_type, 1);
putInt(message_size, 1);
putBytes(message.getBytes());
writeCRC();
rewind();
}
@Override
public int getSize() {
return MESSAGE_SIZE + message_size;
}
}
@@ -219,5 +219,4 @@ public abstract class Message {
data[right] = (byte) (temp & 0xff); data[right] = (byte) (temp & 0xff);
} }
} }
} }