private void handleClient() throws IOException {

        // show when we get a client
        System.out.println("[DEBUG] Got a new client");

        // Get in and out streams to the client
        BufferedReader in = new BufferedReader(new InputStreamReader(
                client.getInputStream()));
        PrintWriter out = new PrintWriter(client.getOutputStream(), true);

        // Check our socket at a fixed rate to determine if the client has
        // crashed
        checkerScheduler = scheduler.scheduleAtFixedRate(new Runnable() {
            @Override
            public void run() {
                sendToUser(clientUsername, Protocol.CLIENT_HELLO);
            }
        }, 0, 1500, TimeUnit.MILLISECONDS);

        try {
            // For each request, handle it
            for (String req = in.readLine(); req != null; req = in.readLine()) {

                // show what the client says
                System.out.println("[CLIENT] " + req);

                // Handle the request. Heavy lifting takes place here.
                String output = handleRequest(req);

                // Send response
                try {
                    // leave if output is null
                    if (output == null) {
                        out.println(Protocol.CLIENT_GOODBYE);
                        break;
                    } else {
                        // otherwise send our client what we need to.
                        out.println(output);
                        continue;
                    }
                } catch (Exception e) {
                    // Our person is gone! Notify everyone then leave the loop
                    serverModel.logUserOff(clientUsername);
                    for (String toUser : serverModel.getUsers()) {
                        sendToUser(toUser,
                                Protocol.CLIENT_USERS_LOGGED_IN_NOTIFICATION
                                        + " > " + serverModel.listOfUsers());
                    }
                    break;
                }

            }
        } finally {
            // Close our stuff
            in.close();
            out.close();
            client.close();
        }

    }