Skip to content
Snippets Groups Projects
UserThread.java 4.91 KiB
Newer Older
  • Learn to ignore specific revisions
  • 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 final Socket socket;
        private final ScheduleServer server;
    
        private PrintWriter writer;
    
    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){
    
                                String newEmployee = rafisWeirdClass.staff.addEmployee(args[1], args[2]);
                                if (!newEmployee.isEmpty()){
                                    server.broadcast("addEmployee/" + newEmployee);
                                }
    
                            }
                            break;
                        case "removeEmployee":
                            try {
    
                                int employeeID = Integer.parseInt(args[1]);
                                if (employeeID == rafisWeirdClass.staff.removeEmployee(employeeID)) {
                                    server.broadcast("removeEmployee/" + employeeID);
                                }
    
                            } catch (NumberFormatException e) {
                                System.out.println("Client Message Error: " + clientMessage);
                            }
                            break;
    
                                String editedShift = rafisWeirdClass.schedule.editShift(Integer.parseInt(args[1]), args[2], args[3], args[4]);
                                if (!editedShift.isEmpty()) {
                                    server.broadcast("editShift/" + editedShift);
                                }
    
                            } catch (NumberFormatException e) {
                                System.out.println("Client Message Error: " + clientMessage);
    
                        case "addShift":
                            try {
    
                                String newShift = rafisWeirdClass.schedule.addShift(Integer.parseInt(args[1]), args[2], Integer.parseInt(args[3]), Integer.parseInt(args[4]));
                                if (!newShift.isEmpty()){
                                    server.broadcast("addShift/" + newShift);
                                }
    
                            } catch (NumberFormatException exception) {
                                System.out.println("Error: Formatting exception while adding shift");
                            }
                            break;
                        case "removeShift":
                            try {
    
                                int shiftID = Integer.parseInt(args[1]);
                                if (shiftID == rafisWeirdClass.schedule.removeShiftByID(shiftID)) {
                                    server.broadcast("removeShift/" + shiftID);
                                }
    
                            } 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 exception) {
                System.out.println("Error in UserThread: " + exception.getMessage());
                exception.printStackTrace();
    
            }
        }
    
        /**
         * Sends a message to the client.
         */
        void sendMessage(String message) {
            writer.println(message);
        }
    }