public void run() {
    System.out.println("Client connected to socket: " + _socket.toString());

    try {
      _out = new PrintWriter(_socket.getOutputStream(), true);
      _in = new BufferedReader(new InputStreamReader(_socket.getInputStream()));

      String inputLine, outputLine;
      GameLogic businessLogic = new GameLogic();
      outputLine = businessLogic.processInput(null);
      _out.println(outputLine);

      // Read from socket and write back the response to client.
      while ((inputLine = _in.readLine()) != null) {
        outputLine = businessLogic.processInput(inputLine);
        if (outputLine != null) {
          _out.println(outputLine);
          if (outputLine.equals("exit")) {
            // System.out.println("Server is closing socket for client:" +
            // _socket.getLocalSocketAddress());
            break;
          }
        } else {
          // System.out.println("OutputLine is null!");
        }
      }
    } catch (IOException e) {
      e.printStackTrace();
    } finally { // In case anything goes wrong we need to close our I/O streams and sockets.
      try {
        _out.close();
        _in.close();
        _socket.close();
      } catch (Exception e) {
        System.out.println("Couldn't close I/O streams");
      }
    }
  }