Added ControllerClient and ControllerServer
- StartController sets up client-wide ControllerClient on socket to game server. - RaceController now calls ControllerClient.sendKey with each keypress - ConnectionAcceptor runs ControllerServer for each successfully connected client #story[1089]
This commit is contained in:
@@ -53,7 +53,7 @@ public class ConnectionController extends Controller {
|
||||
statusColumn.setCellValueFactory(cellData -> cellData.getValue().statusProperty());
|
||||
|
||||
connectionTable.getSelectionModel().selectedItemProperty().addListener((obs, prev, curr) -> {
|
||||
if (curr != null && ((RaceConnection)curr).check()) connectButton.setDisable(false);
|
||||
if (curr != null && curr.check()) connectButton.setDisable(false);
|
||||
else connectButton.setDisable(true);
|
||||
});
|
||||
connectButton.setDisable(true);
|
||||
|
||||
@@ -4,6 +4,7 @@ import javafx.collections.ObservableList;
|
||||
import javafx.fxml.FXML;
|
||||
import javafx.scene.layout.AnchorPane;
|
||||
import visualiser.app.VisualiserInput;
|
||||
import visualiser.gameController.ControllerClient;
|
||||
import visualiser.model.VisualiserBoat;
|
||||
import visualiser.model.VisualiserRace;
|
||||
|
||||
@@ -36,8 +37,8 @@ public class MainController extends Controller {
|
||||
* @param visualiserInput The object used to read packets from the race server.
|
||||
* @param visualiserRace The object modelling the race.
|
||||
*/
|
||||
public void beginRace(VisualiserInput visualiserInput, VisualiserRace visualiserRace) {
|
||||
raceController.startRace(visualiserInput, visualiserRace);
|
||||
public void beginRace(VisualiserInput visualiserInput, VisualiserRace visualiserRace, ControllerClient controllerClient) {
|
||||
raceController.startRace(visualiserInput, visualiserRace, controllerClient);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -19,11 +19,13 @@ import javafx.util.Callback;
|
||||
import network.Messages.Enums.RaceStatusEnum;
|
||||
import shared.model.Leg;
|
||||
import visualiser.app.VisualiserInput;
|
||||
import visualiser.gameController.ControllerClient;
|
||||
import visualiser.gameController.Keys.ControlKey;
|
||||
import visualiser.gameController.Keys.KeyFactory;
|
||||
import visualiser.model.*;
|
||||
|
||||
import java.awt.*;
|
||||
import java.io.IOException;
|
||||
import java.net.URL;
|
||||
import java.text.DecimalFormat;
|
||||
import java.util.ResourceBundle;
|
||||
@@ -58,6 +60,11 @@ public class RaceController extends Controller {
|
||||
*/
|
||||
private Sparkline sparkline;
|
||||
|
||||
/**
|
||||
* Service for sending keystrokes to server
|
||||
*/
|
||||
private ControllerClient controllerClient;
|
||||
|
||||
|
||||
@FXML private GridPane canvasBase;
|
||||
@FXML private Pane arrow;
|
||||
@@ -90,7 +97,11 @@ public class RaceController extends Controller {
|
||||
String codeString = event.getCode().toString();
|
||||
ControlKey controlKey = KeyFactory.getKey(codeString);
|
||||
if(controlKey != null) {
|
||||
System.out.println(controlKey.toString() + " is Pressed.");
|
||||
try {
|
||||
controllerClient.sendKey(controlKey);
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -324,10 +335,11 @@ public class RaceController extends Controller {
|
||||
* @param visualiserInput Object used to read packets from server.
|
||||
* @param visualiserRace Object modelling the race.
|
||||
*/
|
||||
public void startRace(VisualiserInput visualiserInput, VisualiserRace visualiserRace) {
|
||||
public void startRace(VisualiserInput visualiserInput, VisualiserRace visualiserRace, ControllerClient controllerClient) {
|
||||
|
||||
this.visualiserInput = visualiserInput;
|
||||
this.visualiserRace = visualiserRace;
|
||||
this.controllerClient = controllerClient;
|
||||
|
||||
initialiseRace();
|
||||
|
||||
|
||||
@@ -19,6 +19,7 @@ import shared.exceptions.InvalidRaceDataException;
|
||||
import shared.exceptions.InvalidRegattaDataException;
|
||||
import shared.exceptions.XMLReaderException;
|
||||
import visualiser.app.VisualiserInput;
|
||||
import visualiser.gameController.ControllerClient;
|
||||
import visualiser.model.VisualiserBoat;
|
||||
import visualiser.model.VisualiserRace;
|
||||
|
||||
@@ -76,6 +77,8 @@ public class StartController extends Controller implements Observer {
|
||||
*/
|
||||
private VisualiserRace visualiserRace;
|
||||
|
||||
private ControllerClient controllerClient;
|
||||
|
||||
/**
|
||||
* An array of colors used to assign colors to each boat - passed in to the VisualiserRace constructor.
|
||||
*/
|
||||
@@ -258,7 +261,7 @@ public class StartController extends Controller implements Observer {
|
||||
startWrapper.setVisible(false);
|
||||
start.setVisible(false);
|
||||
|
||||
parent.beginRace(visualiserInput, visualiserRace);
|
||||
parent.beginRace(visualiserInput, visualiserRace, controllerClient);
|
||||
}
|
||||
}
|
||||
}.start();
|
||||
@@ -308,6 +311,8 @@ public class StartController extends Controller implements Observer {
|
||||
try {
|
||||
//Begin reading packets from the socket/server.
|
||||
this.visualiserInput = new VisualiserInput(socket);
|
||||
//Send controller input to server
|
||||
this.controllerClient = new ControllerClient(socket);
|
||||
//Store a reference to latestMessages so that we can observe it.
|
||||
LatestMessages latestMessages = this.visualiserInput.getLatestMessages();
|
||||
latestMessages.addObserver(this);
|
||||
|
||||
@@ -0,0 +1,46 @@
|
||||
package visualiser.gameController;
|
||||
|
||||
import visualiser.gameController.Keys.ControlKey;
|
||||
|
||||
import java.io.DataOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.net.Socket;
|
||||
import java.nio.ByteBuffer;
|
||||
|
||||
/**
|
||||
* Basic service for sending key presses to game server
|
||||
*/
|
||||
public class ControllerClient {
|
||||
/**
|
||||
* Socket to server
|
||||
*/
|
||||
Socket socket;
|
||||
|
||||
/**
|
||||
* Output stream wrapper for socket to server
|
||||
*/
|
||||
DataOutputStream outputStream;
|
||||
|
||||
/**
|
||||
* Initialise controller client with live socket.
|
||||
* @param socket to server
|
||||
*/
|
||||
public ControllerClient(Socket socket) {
|
||||
this.socket = socket;
|
||||
try {
|
||||
this.outputStream = new DataOutputStream(socket.getOutputStream());
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Send a keypress to server
|
||||
* @param key to send
|
||||
* @throws IOException if socket write fails
|
||||
*/
|
||||
public void sendKey(ControlKey key) throws IOException {
|
||||
// TODO - get and send action number currently corresponding to key (context dependent)
|
||||
System.out.println(key.toString());
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
package visualiser.gameController;
|
||||
|
||||
import visualiser.gameController.Keys.ControlKey;
|
||||
import visualiser.gameController.Keys.KeyFactory;
|
||||
|
||||
import java.io.DataInputStream;
|
||||
import java.io.IOException;
|
||||
import java.net.Socket;
|
||||
|
||||
/**
|
||||
* Service for dispatching key press data to race from client
|
||||
*/
|
||||
public class ControllerServer implements Runnable {
|
||||
/**
|
||||
* Socket to client
|
||||
*/
|
||||
private Socket socket;
|
||||
/**
|
||||
* Wrapper for input from client
|
||||
*/
|
||||
private DataInputStream inputStream;
|
||||
|
||||
/**
|
||||
* Initialise server-side controller with live client socket
|
||||
* @param socket to client
|
||||
*/
|
||||
public ControllerServer(Socket socket) {
|
||||
this.socket = socket;
|
||||
try {
|
||||
this.inputStream = new DataInputStream(this.socket.getInputStream());
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Wait for controller key input from client and loop.
|
||||
*/
|
||||
@Override
|
||||
public void run() {
|
||||
while(true) {
|
||||
byte[] key = new byte[1];
|
||||
try {
|
||||
inputStream.read(key);
|
||||
// TODO - handle messages received
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -8,7 +8,7 @@ import javafx.scene.input.KeyCode;
|
||||
public class KeyFactory {
|
||||
|
||||
/**
|
||||
* Get the Control Key incharge of a key press
|
||||
* Get the Control Key in charge of a key press
|
||||
* @param key key pressed (String value of KeyCode)
|
||||
* @return the Control Key behaviour of the key pressed.
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user