Refactored event sending function to be more robust and thread safe

This commit is contained in:
Ziver Koc 2021-08-30 01:42:34 +02:00
parent 102d8aa266
commit f5f3730281
4 changed files with 6 additions and 9 deletions

View file

@ -175,14 +175,14 @@ public class EventControllerManager extends HalAbstractControllerManager<HalEven
} }
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public void send(Event event){ public void send(Event event, HalEventData eventData){
Class<? extends HalEventController> controllerClass = (Class<? extends HalEventController>) event.getControllerClass(); Class<? extends HalEventController> controllerClass = (Class<? extends HalEventController>) event.getControllerClass();
HalEventController controller = getControllerInstance(controllerClass); HalEventController controller = getControllerInstance(controllerClass);
if (controller != null) { if (controller != null) {
event.getDeviceData().setTimestamp(System.currentTimeMillis()); // Set timestamp to now event.getDeviceData().setTimestamp(System.currentTimeMillis()); // Set timestamp to now
controller.send(event.getDeviceConfig(), event.getDeviceData()); controller.send(event.getDeviceConfig(), eventData);
reportReceived(event.getDeviceConfig(), event.getDeviceData()); // save action to db reportReceived(event.getDeviceConfig(), eventData); // save action to db
} }
else else
logger.warning("No controller found for event id: "+ event.getId()); logger.warning("No controller found for event id: "+ event.getId());

View file

@ -31,9 +31,8 @@ public class SendEventAction implements HalAction {
if (event != null) { if (event != null) {
HalEventData dataObj = (HalEventData) event.getDeviceConfig().getDeviceDataClass().getDeclaredConstructor().newInstance(); HalEventData dataObj = (HalEventData) event.getDeviceConfig().getDeviceDataClass().getDeclaredConstructor().newInstance();
dataObj.setData(data); dataObj.setData(data);
event.setDeviceData(dataObj);
// Send // Send
EventControllerManager.getInstance().send(event); EventControllerManager.getInstance().send(event, dataObj);
} else } else
logger.warning("Unable to find event with id: "+ event.getId()); logger.warning("Unable to find event with id: "+ event.getId());
} catch (Exception e) { } catch (Exception e) {

View file

@ -53,8 +53,7 @@ public class EventOverviewWebPage extends HalWebPage {
logger.info("Modifying Event(" + id + ") state: " + eventData.toString()); logger.info("Modifying Event(" + id + ") state: " + eventData.toString());
Event event = Event.getEvent(db, id); Event event = Event.getEvent(db, id);
event.setDeviceData(eventData); EventControllerManager.getInstance().send(event, eventData);
EventControllerManager.getInstance().send(event);
} }
int id = (ObjectUtil.isEmpty(request.get("id")) ? -1 : Integer.parseInt(request.get("id"))); int id = (ObjectUtil.isEmpty(request.get("id")) ? -1 : Integer.parseInt(request.get("id")));

View file

@ -75,8 +75,7 @@ public class OnOffTrait extends DeviceTrait {
else else
eventData.turnOff(); eventData.turnOff();
device.setDeviceData(eventData); EventControllerManager.getInstance().send((Event) device, eventData);
EventControllerManager.getInstance().send((Event) device);
} }
} }
} }