Package se.unlogic.standardutils.hddtemp

Source Code of se.unlogic.standardutils.hddtemp.HDDTempUtils

/*******************************************************************************
* Copyright (c) 2010 Robert "Unlogic" Olofsson (unlogic@unlogic.se).
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the GNU Lesser Public License v3
* which accompanies this distribution, and is available at
* http://www.gnu.org/licenses/lgpl-3.0-standalone.html
******************************************************************************/
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 HDDTempUtils {

  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());

      String[] tokens = response.split(delims);

      if((tokens.length - 1) % 4 != 0){
       
        throw new IOException("Invalid data received: " + response);
      }
     
      ArrayList<Drive> drives = new ArrayList<Drive>();
     
      for (int i = 1; i < tokens.length; i = i + 4) {
       
        Drive drive = new Drive();
       
        drive.setDevice(tokens[i]);
        drive.setType(tokens[i+1]);
        drive.setTemp(NumberUtils.toInt(tokens[i+2]));
       
        if(drive.getTemp() != null){
         
          drive.setDriveState(DriveState.OK);
         
        }else if(tokens[i+2].equals("SLP")){
         
          drive.setDriveState(DriveState.SLEEPING);
         
        }else if(tokens[i+2].equals("ERR")){
         
          drive.setDriveState(DriveState.ERROR);
       
        }else{
         
          drive.setDriveState(DriveState.UNKNOWN);
        }
       
        drives.add(drive);
      }
     
      return drives;

    } finally {

      if (socket != null) {
        socket.close();
      }
    }
  }
}
TOP

Related Classes of se.unlogic.standardutils.hddtemp.HDDTempUtils

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.