package art.servers.colorsserver.m.protocol; import art.library.model.devices.Device; import art.library.utils.synchro.Mutex; import art.servers.colorsserver.controller.ControllerController; public class M_Request { public ControllerController controller = null; public M_Message request = null; public M_Message response = null; public Mutex mutex = new Mutex(); public boolean finishedByTimeout = false; public long waitTimestamp = 0; public void send (int timeout) { try { mutex.lockWrite(timeout); } catch (Exception e) { } } public void receive (M_Message response) { try { this.response = response; mutex.releaseWrite(); } catch (Exception e) { } } public void waitResponse (int timeout) { try { waitTimestamp = System.currentTimeMillis(); mutex.lockWrite(timeout); boolean exitByTimeout = ((System.currentTimeMillis()-waitTimestamp) >= timeout); if (exitByTimeout == true) { System.out.println(Device.getDate(System.currentTimeMillis()) + " - " + ((Device)controller.getDevice()).getIdentifier() + " 2.WAIT " + request + " - Timeout: " + timeout + " - BY TIMEOUT: " + Device.getDate(waitTimestamp)); finishedByTimeout = true; } else { // System.out.println(Device.getDate(System.currentTimeMillis()) + " - " + ((Device)controller.getDevice()).getIdentifier() + " 2.WAIT " + request + " - Timeout: " + timeout + " - OK: DIF: " + (System.currentTimeMillis()-waitTimestamp)); } } catch (Exception e) { } } public boolean equals (Object object) { try { M_Request request = (M_Request)object; if ((request.waitTimestamp != waitTimestamp)) return(false); if (request.request.controller != this.request.controller) return(false); if (request.request.directive != this.request.directive) return(false); if (request.request.table != this.request.table) return(false); // if (request.request..length != requestPDU.information.length) return(false); // // if (ArrayUtils.iguales(request.requestPDU.information, requestPDU.information) == false) return(false); return(true); } catch (Exception e) { } return(false); } public String toString() { try { String result = Device.getDate(waitTimestamp) + " - Controller: " + request.controller + " - Directive: " + request.directive + " - Table: " + request.table; return(result); } catch (Exception e) { return(super.toString()); } } }