Skip to content
Snippets Groups Projects
UserThread.java 2.83 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 Socket socket;
        private ScheduleServer server;
        private PrintWriter writer;
        private Model model;
    
        public UserThread(Socket socket, ScheduleServer server, Model model) {
            this.socket = socket;
            this.server = server;
            this.model = model;
        }
    
        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 = model.staff.getEmployees();
                sendMessage(serverMessage);
    
    
                do {
                    clientMessage = reader.readLine();
                    String[] args = clientMessage.split("/");
                    switch (args[0]) {
                        case "addEmployee":
                            if(args.length == 3){
                                model.staff.addEmployee(args[1], args[2]);
    
                                serverMessage = model.staff.getEmployees();
                                server.broadcast(serverMessage);
    
                            }
                            break;
                        case "removeEmployee":
                            try {
                                model.staff.removeEmployee(Integer.parseInt(args[1]));
    
                                serverMessage = model.staff.getEmployees();
                                server.broadcast(serverMessage);
    
                            } catch (NumberFormatException e) {
                                System.out.println("Client Message Error: " + clientMessage);
                            }
                            break;
    
                        case "allEmployees":
                            //Returns all Employees
                            serverMessage = model.staff.getEmployees();
                            sendMessage(serverMessage);
                            break;
                        case "allShifts":
                            serverMessage = model.schedule.allShifts();
                            sendMessage(serverMessage);
                            break;
    
    
                    }
    
                } 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);
        }
    }