Skip to content
Snippets Groups Projects
UserThread.java 4.2 KiB
Newer Older
package com.example.schedulerapp;

import java.io.*;
import java.net.*;

/**
 * This thread handles connection for each connected client, so the server
 * can handle multiple clients at the same time.
 *
 * @author www.codejava.net
 */
public class UserThread extends Thread {
    private Socket socket;
    private ScheduleServer server;
    private PrintWriter writer;
eyan_'s avatar
eyan_ committed
    private RafisWeirdClass rafisWeirdClass;
eyan_'s avatar
eyan_ committed
    public UserThread(Socket socket, ScheduleServer server, RafisWeirdClass rafisWeirdClass) {
        this.socket = socket;
        this.server = server;
eyan_'s avatar
eyan_ committed
        this.rafisWeirdClass = rafisWeirdClass;
    }

    public void run() {
        try {
            InputStream input = socket.getInputStream();
            BufferedReader reader = new BufferedReader(new InputStreamReader(input));

            OutputStream output = socket.getOutputStream();
            writer = new PrintWriter(output, true);

            String serverMessage;
            String clientMessage;

eyan_'s avatar
eyan_ committed
            serverMessage = rafisWeirdClass.staff.getEmployees();
eyan_'s avatar
eyan_ committed
            serverMessage = rafisWeirdClass.schedule.allShifts();
            sendMessage(serverMessage);
            do {
                clientMessage = reader.readLine();
                String[] args = clientMessage.split("/");
                switch (args[0]) {
                    case "addEmployee":
                        if(args.length == 3){
eyan_'s avatar
eyan_ committed
                            rafisWeirdClass.staff.addEmployee(args[1], args[2]);
                            serverMessage = rafisWeirdClass.staff.getEmployees();
                            server.broadcast(serverMessage);
                        }
                        break;
                    case "removeEmployee":
                        try {
eyan_'s avatar
eyan_ committed
                            rafisWeirdClass.staff.removeEmployee(Integer.parseInt(args[1]));
                            serverMessage = rafisWeirdClass.staff.getEmployees();
                            server.broadcast(serverMessage);
                        } catch (NumberFormatException e) {
                            System.out.println("Client Message Error: " + clientMessage);
                        }
                        break;
                    case "addShift":
                        try {
eyan_'s avatar
eyan_ committed
                            rafisWeirdClass.schedule.addShift(Integer.parseInt(args[1]), args[2], Integer.parseInt(args[3]), Integer.parseInt(args[4]));
                            serverMessage = rafisWeirdClass.schedule.allShifts();
                            server.broadcast(serverMessage);
                        } catch (NumberFormatException exception) {
                            System.out.println("Error: Formatting exception while adding shift");
                        }
                        break;
                    case "removeShift":
                        try {
eyan_'s avatar
eyan_ committed
                            rafisWeirdClass.schedule.removeShift(args[1], args[2], Integer.parseInt(args[3]), Integer.parseInt(args[4]));
                            serverMessage = rafisWeirdClass.schedule.allShifts();
                            server.broadcast(serverMessage);
                        } catch (NumberFormatException exception) {
                            System.out.println("Error: Formatting exception while removing shift");
                        }
                        break;
                    case "allEmployees":
                        //Returns all Employees
eyan_'s avatar
eyan_ committed
                        serverMessage = rafisWeirdClass.staff.getEmployees();
                        sendMessage(serverMessage);
                        break;
                    case "allShifts":
eyan_'s avatar
eyan_ committed
                        serverMessage = rafisWeirdClass.schedule.allShifts();
                }

            } while (!clientMessage.equals("logout"));

            server.removeUser(this);
            socket.close();

        } catch (IOException ex) {
            System.out.println("Error in UserThread: " + ex.getMessage());
            ex.printStackTrace();
        }
    }

    /**
     * Sends a message to the client.
     */
    void sendMessage(String message) {
        writer.println(message);
    }
}