Skip to content
Snippets Groups Projects
ReceiveThread.java 5.74 KiB
Newer Older
  • Learn to ignore specific revisions
  • package com.example.schedulerapp;
    
    import java.io.*;
    import java.net.*;
    
    
        Class Name: ReceiveThread
        Description: This class handles messages sent from the server, and the required parsing to be used for in the Model class.
    
    public class ReceiveThread extends Thread {
    
        private BufferedReader reader;
    
    eyan_'s avatar
    eyan_ committed
        private final Model client;
    
        /*
        Name: ReceiveThread
        Parameters:
            Socket socket: socket for communicating to the server.
            Model client: class that contains the employee and shift hashmaps.
        Description: Constructor class that gets the input stream to be read when server messages are sent.
        Return: ReceiveThread
         */
    
    eyan_'s avatar
    eyan_ committed
        public ReceiveThread(Socket socket, Model client) {
    
    
            try {
                InputStream input = socket.getInputStream();
                reader = new BufferedReader(new InputStreamReader(input));
    
            } catch (IOException exception) {
                System.out.println("Error getting input stream: " + exception.getMessage());
                exception.printStackTrace();
    
        /*
        Name: Run
        Parameters: none
        Description: Responsible for handling and parsing messages from the server.
        Return: void
         */
    
        public void run() {
            while(true) {
                try {
    
                    String response = reader.readLine(); // Waits for messages from the server.
    
                    String[] args = response.split("/");
                    switch (args[0]) {
    
                        case "allEmployees" -> allEmployees(args);
                        case "allShifts" -> allShifts(args);
                        case "addEmployee" -> addEmployee(args[1]);
                        case "removeEmployee" -> removeEmployee(args[1]);
                        case "addShift" -> addShift(args[1]);
    
                        case "removeShift" -> removeShiftByID(args[1]);
                        case "editShift" -> editShift(args[1]); // fix
    
                    System.out.println("Dropped connection from server: " + exception.getMessage());
    
        /*
        Name: allEmployees
        Parameters:
            String[] allEmployees: All employee information sent from server. Employee fields are is separated by a '.'
            delimiter.
        Description: Separates all employees and adds them to the local employee HashMap by their ID.
        Return: void
         */
    
        private void allEmployees(String[] allEmployees) {
            for (String employee : allEmployees) {
                if (!employee.equals("allEmployees")){
                   addEmployee(employee);
                }
            }
        }
    
    
        /*
        Name: addEmployee
        Parameters:
            String employeeData: All the information for a given employee separated by '.'
        Description: Adds an employee to the local employee HashMap by their ID.
        Return: void
         */
    
        private void addEmployee(String employeeData) {
            try {
                String[] dataSplit = employeeData.split("\\.");
                this.client.employees.put(Integer.parseInt(dataSplit[0]), new Employee(employeeData));
            } catch (Exception exception) {
                exception.printStackTrace();
            }
        }
    
    
        /*
        Name: RemoveEmployee
        Parameters:
            String employeeID: The employeeID of the employee.
        Description: Removes an employee from the employee HashMap by there employee ID.
        Return: void
         */
    
        private void removeEmployee(String employeeID) {
            try {
    
                int intID = Integer.parseInt(employeeID);
    
                this.client.employees.remove(intID);
                for (Shift shift : this.client.shifts.values()) {
                    if (shift.getEmployeeID() == intID) {
                        this.client.shifts.remove(shift.getShiftID());
                    }
                }
    
            } catch (Exception exception) {
                exception.printStackTrace();
            }
        }
    
    
        /*
        Name: allShifts
        Parameters:
            String[] allShifts: All the shifts to be added locally from the server in the form String[].
        Description: Adds all the shifts to the local shift hashmap by the shift id.
        Return: void
         */
    
        private void allShifts(String[] allShifts) {
            for (String shift : allShifts) {
                if (!shift.equals("allShifts")){
                    addShift(shift);
                }
            }
        }
    
    
        /*
        Name: addShift
        Parameters:
            String shiftData: a string containing shift data from the server
        Description: Adds a shift to the local shift Hashmap by shift ID.
        Return: void
         */
    
        private void addShift(String shiftData) {
            try {
                String[] dataSplit = shiftData.split("\\.");
                this.client.shifts.put(Integer.parseInt(dataSplit[4]), new Shift(shiftData));
            } catch (Exception exception) {
                exception.printStackTrace();
            }
        }
    
    
        /*
        Name: removeShiftByID
        Parameters:
            String id: The shift id of an existing shift.
        Description: Removes a shift from the local shift HashMap.
        Return: void
         */
        private void removeShiftByID(String id) {
    
            try {
                this.client.shifts.remove(Integer.parseInt(id));
            } catch (Exception exception) {
                exception.printStackTrace();
            }
        }
    
    
        /*
        Name: editShift
        Parameters:
            String editedShift: The information of the editedShift from the server.
        Description: Edits an existing shift.
        Return: void
         */
        private void editShift(String editedShift) {
    
            String[] shiftSplit = editedShift.split("\\.");
            try {
    
                Integer.parseInt(shiftSplit[4]);
                removeShiftByID(shiftSplit[4]);
                addShift(editedShift);
    
            } catch (Exception exception) {
                exception.printStackTrace();
            }
        }