package art.servers.gost.access.controller; import art.library.interop.serialization.Serialization; import art.library.interop.web.HttpsRequest; import art.library.model.devices.gost.access.AccessEnforcement; import art.library.model.devices.gost.access.AccessEnforcementInformation; import art.library.model.devices.gost.access.AccessEnforcementStatus; import art.servers.gost.access.Shared; import art.servers.gost.access.configuration.Configuration; import art.servers.gost.access.configuration.ConfigurationDetail; import art.servers.gost.access.types.DatabasePoolConnection; import art.servers.gost.access.types.neural.NeuralStatus; public class Controller_ACCESS_Neural extends Controller_ACCESS { private Controller_ACCESS_Neural_Detections controllerDetections = null; private long lastRequestTimestamp = -1; private ConfigurationDetail configuration = null; protected long lastOnline = 0; protected boolean firstTime = true; public Controller_ACCESS_Neural(AccessEnforcement access, DatabasePoolConnection database) { super(access, database); this.configuration = ((Configuration)Shared.configuration).detail; this.setName(Shared.getMessage("Controller access") + " " + access.information.name); } public AccessEnforcement getAccessEnforcement() { return (AccessEnforcement)getDevice(); } public void run() { Shared.traceInformation(getName(), Shared.getMessage("Starting")); initialise(); controllerDetections = new Controller_ACCESS_Neural_Detections(this); controllerDetections.start(); while ((isInterrupted() == false) && (exit == false)) { try { if (Shared.isServerEnabled() == true) { update(); } } catch (Exception exception) { } try { sleep(1000); } catch (Exception e) { } if (Shared.model.existsDevice(this.getAccessEnforcement().getIdentifier()) == false) { Shared.traceInformation(getName(), Shared.getMessage("Device no longer exists")); exit = true; } } Shared.println(getName(), "Finished"); Shared.traceInformation(getName(), Shared.getMessage("Finishing")); } private void createStatus (AccessEnforcement accessclone) { try { if (accessclone.getDeviceStatus() == null) { accessclone.status = new AccessEnforcementStatus(); } } catch (Exception e) { Shared.printstack(getName(), e); } } private void update() throws Exception { AccessEnforcement access = getAccessEnforcement(); createStatus(access); AccessEnforcement accessclone = Serialization.clone(access); try { // Create empty status if it is empty createStatus(accessclone); if (((System.currentTimeMillis()-lastRequestTimestamp) >= (accessclone.getDeviceInformation().polling*1000L))) { lastRequestTimestamp = System.currentTimeMillis(); updateStatus(accessclone); online(accessclone); } return; } catch (Exception exception) { exception.printStackTrace(); if ((access.alarms.alarm_offline > 0) || (firstTime == true)) { firstTime = false; Shared.printstack(getName(), exception); } offline(accessclone); // todas las camaras offline } } protected void offline(AccessEnforcement accessclone)throws Exception { AccessEnforcement access = getAccessEnforcement(); accessclone.offline(access); Shared.model.updateDevice(access, accessclone); } protected void online(AccessEnforcement accessclone) throws Exception { AccessEnforcement access = getAccessEnforcement(); if ((accessclone.alarms.alarm_offline > 0) || (firstTime == true)) { firstTime = false; Shared.println(getName(), Shared.getMessage("Access online")); } lastOnline = System.currentTimeMillis(); accessclone.setAlarm("alarm_offline", false); accessclone.setAlarm("alarm_invalid", false); Shared.model.updateDevice(access, accessclone); } private void updateStatus(AccessEnforcement accessclone) throws Exception { AccessEnforcementInformation information = accessclone.getDeviceInformation(); // https://10.106.7.18/art?operation=getStatus String url = "https://" + information.neural.connection.address + "/art?operation=getStatus"; String user = Shared.getText(information.neural.connection.user); String password = Shared.getText(information.neural.connection.password); if ((user == null) || (password == null)) { user = "write"; password = "EdubVmde"; } url += "&token=" + user + "," + password; System.out.println(getName() + " - " + url); byte[] response = HttpsRequest.requestBytes(url, user, password, new byte[0], 30000, 60000); NeuralStatus neuralStatus = Serialization.deserialize(NeuralStatus.class, response); accessclone.setAlarm("alarma_clock", neuralStatus.alarms.alarm_ntp); accessclone.setAlarm("alarm_camera_video", neuralStatus.alarms.alarm_vid); } }