package org.ourgrid.worker.business.requester; import java.util.ArrayList; import java.util.List; import org.ourgrid.common.internal.IResponseTO; import org.ourgrid.worker.business.controller.IdlenessDetectorController; import org.ourgrid.worker.business.dao.IdlenessDetectorDAO; import org.ourgrid.worker.business.dao.WorkerDAOFactory; import org.ourgrid.worker.communication.actions.idlenessdetector.WinIdlenessDetectorAction.Kernel32; import org.ourgrid.worker.communication.actions.idlenessdetector.WinIdlenessDetectorAction.User32; import org.ourgrid.worker.request.WinIdlenessDetectorActionRequestTO; public class WinIdlenessDetectorActionRequester extends AbstractScheduledIdlenessDetectorActionRequester<WinIdlenessDetectorActionRequestTO> { public List<IResponseTO> execute(WinIdlenessDetectorActionRequestTO request) { List<IResponseTO> responses = new ArrayList<IResponseTO>(); if (isIdle()) { IdlenessDetectorController.getInstance().resumeWorker(responses); } else { IdlenessDetectorController.getInstance().pauseWorker(responses); } return responses; } protected boolean isIdle() { IdlenessDetectorDAO idlenessDetectorDAO = WorkerDAOFactory.getInstance().getIdlenessDetectorDAO(); return super.isIdle() && (!idlenessDetectorDAO.isActive() || getIdleTimeMillisWin32() > idlenessDetectorDAO.getIdlenessTime()); } /** * Get the amount of milliseconds that have elapsed since the last input event * (mouse or keyboard) * @return idle time in milliseconds */ private static int getIdleTimeMillisWin32() { User32.LASTINPUTINFO lastInputInfo = new User32.LASTINPUTINFO(); User32.INSTANCE.GetLastInputInfo(lastInputInfo); return Kernel32.INSTANCE.GetTickCount() - lastInputInfo.dwTime; } }