package com.fourinone; import java.util.Date; import java.util.concurrent.TimeoutException; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.io.File; public class StartResult<E> extends Result{ private Process p; private long s; public StartResult(){ super(); } public StartResult(boolean ready) { super(ready); } public StartResult(Process p, boolean ready){ this(ready); this.p = p; s = (new Date()).getTime(); } public int getStatus() { try{ //System.out.println("p.exitValue():"+p.exitValue()); setResult(p.exitValue(),p.exitValue()==0?READY:EXCEPTION); }catch(IllegalThreadStateException ex){ //status = NOTREADY; } return status; } public int getStatus(long timeout){ if((new Date()).getTime()-s>timeout){ TimeoutException te = new TimeoutException("TryStart StartResult Timeout"); LogUtil.info("[TryStart]", "[Timeout]", te.getMessage()+" and be killed"); kill(EXCEPTION); //System.out.println("kill status:"+status); return status; }else return getStatus(); } public void kill(){ kill(READY); } private void kill(int status){ p.destroy(); setResult(1,status); } public void print(final String logpath){ final InputStream is = p.getInputStream(); new AsyncExector(){ public void task(){ //throws Exception BufferedReader stdout = new BufferedReader(new InputStreamReader(is)); FileAdapter fa = new FileAdapter(new File(logpath).getPath()); String line=""; try{ while((line=stdout.readLine())!=null){ //System.out.println(line); fa.getWriter().write((line+"\r\n").getBytes()); } }catch(Exception e){ LogUtil.info("AsyncExector", "print", e); }finally{ try{ stdout.close(); fa.close(); }catch(Exception e){ LogUtil.info("AsyncExector", "close", e); } } //System.out.println("print over."); } }.run(); } void setResult(int res, int status) { setResult(res); setReady(status); } public static long h(long t){ return m(t*60l); } public static long m(long t){ return s(t*60l); } public static long s(long t){ return t*1000l; } }