Add: complete JavaDOC to TCPClient

This commit is contained in:
2026-04-26 17:03:44 +02:00
parent bce90c2640
commit 1260c58bb6
2 changed files with 62 additions and 28 deletions
@@ -8,32 +8,62 @@ import it.polimi.ingsw.gc14.Network.NetworkEvents.AddPlayer;
import java.io.*; import java.io.*;
import java.net.*; import java.net.*;
/**
* Client TCP. Sends and receives messages with the TCP server.
*/
public class TCPClient { public class TCPClient {
/** Socket TCP */
Socket communicationSocket; Socket communicationSocket;
/** Input stream used receive objects from the server */
ObjectInputStream socketReceive; ObjectInputStream socketReceive;
/** Output stream used to send objects to the server */
ObjectOutputStream socketSend; ObjectOutputStream socketSend;
/** Client game's controller */
GameController controller; GameController controller;
/** IP address of the server to connect to */
String hostname; String hostname;
/** TCP port */
int port; int port;
public TCPClient(GameController controller, String hostname, int port){
/**
* Class constructor that initializes the attributes.
* @param controller The game controller
* @param hostname The IP address of the server
* @param port The TCP port of the server
*/
public TCPClient(GameController controller, String hostname, int port) {
this.controller = controller; this.controller = controller;
this.hostname = hostname; this.hostname = hostname;
this.port = port; this.port = port;
} }
public boolean start(String user, int proposedNPlayers){
try{ /**
* Starts the TCP connection with the server.
* Sends an {@link AddPlayer} event, if the server responds with {@code -1}, the connection is refused and the method returns {@code false}.
* Otherwise, a listener thread is started.
* @param user The username of the player
* @param proposedNPlayers The desired number of players for the game
* @return true if the connection is successful, false otherwise.
*/
public boolean start(String user, int proposedNPlayers) {
try {
communicationSocket = new Socket(hostname, port); communicationSocket = new Socket(hostname, port);
socketSend = new ObjectOutputStream(communicationSocket.getOutputStream()); socketSend = new ObjectOutputStream(communicationSocket.getOutputStream());
socketReceive = new ObjectInputStream(communicationSocket.getInputStream()); socketReceive = new ObjectInputStream(communicationSocket.getInputStream());
sendEvent(new AddPlayer(user, proposedNPlayers)); sendEvent(new AddPlayer(user, proposedNPlayers));
if(communicationSocket.getInputStream().read() == -1){ if (communicationSocket.getInputStream().read() == -1) {
System.out.println("Could not connect to server"); System.out.println("Could not connect to server");
return false; return false;
} } else {
else{
Thread listener = new Thread(() -> receiveMessage()); Thread listener = new Thread(() -> receiveMessage());
listener.start(); listener.start();
return true; return true;
@@ -42,43 +72,47 @@ public class TCPClient {
e.printStackTrace(); e.printStackTrace();
return false; return false;
} }
} }
private void receiveMessage(){
while(true){
try{
Object read = socketReceive.readObject();
if (read instanceof NetworkEvent event) { //TODO non fare con instanceof /**
if(event.getIsError()) { * Listens continuously for incoming objects from the server.
* - If the received object is a {@link NetworkEvent} flagged as an error, it is printed.
* - If the received object is a valid {@link NetworkEvent}, it is applied to the game controller.
* - If the received object is a {@link Game} model, the controller's model is set.
*/
private void receiveMessage() {
while (true) {
try {
Object read = socketReceive.readObject();
if (read instanceof NetworkEvent event) { //TODO: avoid instanceof
if (event.getIsError()) {
System.out.println(event); System.out.println(event);
} else { } else {
event.apply(controller); event.apply(controller);
//clientController.view.update(); TODO //clientController.view.update(); TODO
} }
} } else if (read instanceof Game model) {
else if (read instanceof Game model) {
controller.setModel(model); controller.setModel(model);
} }
} catch (IOException e) {
}
catch(IOException e){
e.printStackTrace(); e.printStackTrace();
} } catch (ClassNotFoundException e) {
catch(ClassNotFoundException e){
throw new RuntimeException(e); throw new RuntimeException(e);
} }
} }
} }
private void sendEvent(NetworkEvent event){
try{ /**
* Sends a {@link NetworkEvent} to the server.
* @param event The NetworkEvent to send.
*/
private void sendEvent(NetworkEvent event) {
try {
socketSend.writeObject(event); socketSend.writeObject(event);
} } catch (IOException e) {
catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
} }
} }
} }
@@ -19,7 +19,7 @@ public class ClientHandler implements Runnable {
/** The TCP socket */ /** The TCP socket */
private Socket clientSocket; private Socket clientSocket;
/** Input stream used to receive requests from the client */ /** Input stream used to receive objects from the client */
public ObjectInputStream in; public ObjectInputStream in;
/** Output stream used to send objects to the client */ /** Output stream used to send objects to the client */