import java.io.*; import java.net.*; import java.util.*; class CheckersServerThread extends Thread { CheckersServer server; public BufferedReader inputStream; public BufferedWriter outputStream; public Socket socket; /* public String toString() { return "CheckersServerThread: socket = " + socket + " | inputStream = " + inputStream + " | outputStream: " + outputStream; }*/ CheckersServerThread(Socket socket, CheckersServer server) throws IOException { super("CheckersServer"); //I/O Streams inputStream = new BufferedReader(new InputStreamReader(socket.getInputStream())); outputStream = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); //Stop if inputStream and outputStream are not created correctly. if (inputStream == null) { System.err.println("inputStream not created successfully."); throw new IOException(); } if (outputStream == null) { System.err.println("outputStream not created successfully."); throw new IOException(); } this.socket = socket; this.server = server; } public void run() { //Main procedure for thread. while (socket != null) { try { String userInput = inputStream.readLine(); if (userInput != null) { server.forwardString(userInput, this); } } //If any error occurs that prevents communication, output "disconnected" //so that the game knows something when wrong. catch (EOFException e) { server.forwardString("disconnected", this); cleanup(); return; } catch (NullPointerException e) { server.forwardString("disconnected", this); cleanup(); return; } catch (IOException e) { server.forwardString("disconnected", this); cleanup(); return; } catch (Exception e) { server.forwardString("disconnected", this); System.err.println("disconnected"); cleanup(); return; } } } public void finalize() { cleanup(); } void cleanup() { //Close all data streams and the socket ignoring any errors. try { if (inputStream != null) { inputStream.close(); inputStream = null; } } catch (Exception e) {} try { if (outputStream != null) { outputStream.close(); outputStream = null; } } catch (Exception e) {} try { if (socket != null) { socket.close(); socket = null; } } catch (Exception e) {} } }