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; private final RafisWeirdClass rafisWeirdClass; public UserThread(Socket socket, ScheduleServer server, RafisWeirdClass rafisWeirdClass) { this.socket = socket; this.server = server; 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; serverMessage = rafisWeirdClass.staff.getEmployees(); sendMessage(serverMessage); 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]); rafisWeirdClass.schedule.removeAllShiftsByID(employeeID); if (employeeID == rafisWeirdClass.staff.removeEmployee(employeeID)) { server.broadcast("removeEmployee/" + employeeID); } } catch (NumberFormatException e) { System.out.println("Client Message Error: " + clientMessage); } break; case "editShift": try { 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); } break; 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 serverMessage = rafisWeirdClass.staff.getEmployees(); sendMessage(serverMessage); break; case "allShifts": serverMessage = rafisWeirdClass.schedule.allShifts(); sendMessage(serverMessage); break; } } 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); } }