/*
 * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
 * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
 */
package feedback.server;

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
/**
 *
 * @author callum
 */
public class FeedbackServer implements Runnable {
    
    private static final int PORT = 19000;  // this is the port it listens ffor a connection on
    private final FeedbackCounter feedbackCounter; 
    private final String question;  
    private final String[] answers; 
    private boolean running = true;  
    
    private ServerSocket serverSocket; //declare socket variable
    
    public FeedbackServer(String question, String[] answers, FeedbackCounter counter) {
        this.feedbackCounter = counter;
        this.question = question;
        this.answers = answers;
    }
    
    @Override
    public void run() {
        System.out.println("FeedbackServer thread started");
        try {
            serverSocket = new ServerSocket(PORT);
            System.out.println("Server started on port " + PORT);

            while (running) {
                System.out.println("server running");
                Socket clientSocket = serverSocket.accept();
                System.out.println("Client has connected: " + clientSocket.getInetAddress());
            
                //do the rest in a thread in an instance of the clienthandler class
                ClientHandler handler = new ClientHandler(clientSocket, question, answers, feedbackCounter);
                new Thread(handler).start();
            }
        } catch (IOException e) {
        System.err.println("Server error when doing network stuff: " + e.getMessage());
        } finally {stop();} // method to Clean up, close the server socket and stop accepting clients basically shutting down the server
    }
    
    //stops the server properly
    public void stop() {
        running = false;
        try {
            if (serverSocket != null && !serverSocket.isClosed()){
                serverSocket.close();
            }
        } catch(IOException e) {
            System.err.println("Error closing server: " + e.getMessage());
        }
    }
}
