public SocketManager(Socket socket) {
    this.socket = socket;

    users = new ArrayList<User>();
    tUser = new User();

    // Spring Framework IoC
    ClassPathXmlApplicationContext beanfactory = null;
    try {
      beanfactory = new ClassPathXmlApplicationContext(SPRING_CONFIG_DEFAULT);
      userSvc = (IUserSvc) beanfactory.getBean("userSvc");

    } catch (Exception e) {
      dLog.error("Unable to configure Spring beans", e);
    } finally {
      if (beanfactory != null) {
        beanfactory.close();
      }
    }

    dLog.trace("In constructor");
  }
  @Override
  public void run() {
    SOCKET_PORT = String.valueOf(socket.getRemoteSocketAddress());
    dLog.trace("Starting to run server");
    // get all users
    try {
      users = userSvc.getAllUsers();
    } catch (Exception e2) {
      dLog.error("Unable to get all users", e2);
    }
    dLog.trace("Got " + users.size() + " users");

    try {
      while (!exit) {
        out = new ObjectOutputStream(socket.getOutputStream());
        in = new ObjectInputStream(socket.getInputStream());
        dLog.trace("Successfully got input/output streams");

        String inputStr = "";
        out.writeObject("Burrito POS Server Connected. Enter Username: "******"OUTPUT | Burrito POS Server Connected. Enter Username: "******"OUTPUT | Burrito POS Server Connected. Enter Username: "******"INPUT | " + inputStr);
        parent.updateStatus(appendInfo("INPUT | " + inputStr));

        while (!inputStr.equals("exit") && !this.exit) {
          dLog.trace("Exit? " + exit);
          if (tUser.getUserName() == null) {
            tUser.setUserName(inputStr);
            out.writeObject("OK User " + inputStr + ", enter password: "******"OUTPUT | OK User " + inputStr + ", enter password: "******"OUTPUT | Burrito POS Server Connected. Enter Username: "******"Username: "******" | Password: "******"Stored user: "******" | stored pass: "******"OK User verified. Enter command: ");
              dLog.trace("OUTPUT | OK User verified. Enter command: ");
              parent.updateStatus(appendInfo("OUTPUT | OK User verified. Enter command: "));
              auth = true;
            } else {
              tUser.setUserName(null);
              tUser.setPassword(null);
              out.writeObject("ERROR Invalid Credentials. Enter Username: "******"OUTPUT | ERROR Invalid Credentials. Enter Username: "******"OUTPUT | ERROR Invalid Credentials. Enter Username: "******"exit")) {
              out.writeObject("OK Command " + inputStr + " entered. Enter command: ");
              dLog.trace("OUTPUT | OK Command " + inputStr + " entered. Enter command: ");
              parent.updateStatus(
                  appendInfo("OUTPUT | OK Command " + inputStr + " entered. Enter command: "));
            }
          }

          inputStr = (String) in.readObject();
          dLog.trace("INPUT | " + inputStr);
          parent.updateStatus(appendInfo("INPUT | " + inputStr));
        }

        exit = true;
        try {
          dLog.trace("Closing the socket");
          auth = false;
          out.writeObject("Exiting");
          dLog.trace("Exiting");
          parent.updateStatus(appendInfo("Exiting"));
          this.close();
        } catch (Exception e1) {
          dLog.error("Exception in closing socket", e1);
        }
      }
    } catch (Exception e) {
      dLog.error("Exception in SocketManager run", e);
    }
  }
 public void setExit(boolean exit) {
   dLog.trace("setExit: " + exit);
   this.exit = exit;
 }