package se.unlogic.standardutils.hddtemp; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.Socket; import java.net.SocketTimeoutException; import java.util.ArrayList; import se.unlogic.standardutils.net.SocketUtils; import se.unlogic.standardutils.numbers.NumberUtils; public class HddTempUtil { private static final String delims = "[|]+"; public static ArrayList<Drive> getHddTemp(String host, int port, int timeout) throws IOException { Socket socket = null; try { socket = SocketUtils.getSocket(host, port, timeout); BufferedReader bfrRd = new BufferedReader(new InputStreamReader(socket.getInputStream())); int waitCount = 0; while(!bfrRd.ready()){ if(waitCount >= timeout){ throw new SocketTimeoutException("No HDD temp response received"); } try { waitCount += 200; Thread.sleep(200); } catch (InterruptedException e) {} } String response = new String(bfrRd.readLine()); ArrayList<Drive> lRet = new ArrayList<Drive>(); String[] tokens = response.split(delims); int temp = 0; String type = null; String device = null; boolean bDev = false; boolean bType = false; boolean bTemp = false; for (int i = 0; i < tokens.length; i++) { if (i > 0) { if (bDev == false) { device = new String(tokens[i]); bDev = true; } else if (bType == false) { type = new String(tokens[i]); bType = true; } else if (bTemp == false) { temp = NumberUtils.toInt(tokens[i]); bTemp = true; } else { lRet.add(new Drive(temp, type, device)); bDev = false; bType = false; bTemp = false; } } } return lRet; } finally { if (socket != null) { socket.close(); } } } }