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 + ":" + information.neural.connection.port + "/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);
|
|
}
|
|
}
|