Sei sulla pagina 1di 3

import java.io.

*;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {


private static ServerSocket listener;
private int numPlayers;
private static Socket socket;
public static PrintWriter toClient;

//costruttore server
public Server() {
System.out.println("Server");
numPlayers = 0;
//try - catch --> quando il client si connettera' al server dovra' farlo
alla porta indicata nel ServerSocket altrimenti = exception
try {
listener = new ServerSocket(4321);
} catch(IOException ex) {
System.out.println("Exception dal costruttore del Server");
}
}

//metodo per accettare la connessione dei clients


public void acceptConnections() {
try {
System.out.println("In attesa di una connessione");

//ciclo while che limita la connessione dei giocatori da un min di 2 a


un max di 4
while(numPlayers > 1 && numPlayers < 5) {
socket = listener.accept();
numPlayers++;
System.out.println("Player # " + numPlayers + " pronti a giocare");
}

}catch(IOException ex) {
System.out.println("IOException da accettaConnessioni");
}
}

public static void main(String[] args){


Server s = new Server();
s.acceptConnections();
InputStream socketInput = null;
OutputStream socketOutput = null;

try {
// Stream di input e di output
socketInput = socket.getInputStream();
socketOutput = socket.getOutputStream();
}catch (IOException ex){
System.out.println("Errore socket di input e output");
}

//Input e Output stream


InputStreamReader socketReader = new InputStreamReader(socketInput);
OutputStreamWriter socketWriter = new OutputStreamWriter(socketOutput);
BufferedReader fromClient = new BufferedReader(socketReader);
toClient = new PrintWriter(socketWriter);

// Thread di invio messaggi


Sender serverSender = new Sender(toClient);
Thread senderThread = new Thread(serverSender);
senderThread.start();

// Thread partita
Partita partita = new Partita();
Thread partitaThread = new Thread(partita);

// Ricezione messaggi e azione


String message = "";

while (!message.equals("quit") && !message.equals("restart")) {


try {
message = fromClient.readLine();
}catch (IOException ex){
System.out.println("Errore nella lettura del messaggio!");
break;
}

switch (message) {
case "start" -> {
partitaThread.start();
toClient.println("Partita iniziata");
toClient.flush();
}
case "pause" -> {
partita.isPaused();
if (!partitaThread.isInterrupted()) { //Se la partita non è
interrotta print, vedere run() in Partita
toClient.println("Partita in pausa");
toClient.flush();
}
}
case "resume" -> {
partita.resume();
toClient.println("Partita ripresa");
toClient.flush();
}
}
}

if(message.equals("quit")) {
try {
partita.quit();
System.out.println(Thread.currentThread().getName());
partitaThread.interrupt();
senderThread.interrupt();
fromClient.close();
toClient.close();
socket.close();
listener.close();
}catch (IOException e){
e.printStackTrace();
}
}
}
}

Potrebbero piacerti anche