aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/traccar/handler/events
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/org/traccar/handler/events')
-rw-r--r--src/main/java/org/traccar/handler/events/AlertEventHandler.java17
-rw-r--r--src/main/java/org/traccar/handler/events/BaseEventHandler.java32
-rw-r--r--src/main/java/org/traccar/handler/events/BehaviorEventHandler.java18
-rw-r--r--src/main/java/org/traccar/handler/events/CommandResultEventHandler.java17
-rw-r--r--src/main/java/org/traccar/handler/events/DriverEventHandler.java18
-rw-r--r--src/main/java/org/traccar/handler/events/FuelEventHandler.java22
-rw-r--r--src/main/java/org/traccar/handler/events/GeofenceEventHandler.java21
-rw-r--r--src/main/java/org/traccar/handler/events/IgnitionEventHandler.java25
-rw-r--r--src/main/java/org/traccar/handler/events/MaintenanceEventHandler.java19
-rw-r--r--src/main/java/org/traccar/handler/events/MediaEventHandler.java16
-rw-r--r--src/main/java/org/traccar/handler/events/MotionEventHandler.java22
-rw-r--r--src/main/java/org/traccar/handler/events/OverspeedEventHandler.java27
12 files changed, 72 insertions, 182 deletions
diff --git a/src/main/java/org/traccar/handler/events/AlertEventHandler.java b/src/main/java/org/traccar/handler/events/AlertEventHandler.java
index 531a0f957..ca580b60d 100644
--- a/src/main/java/org/traccar/handler/events/AlertEventHandler.java
+++ b/src/main/java/org/traccar/handler/events/AlertEventHandler.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2016 - 2022 Anton Tananaev (anton@traccar.org)
+ * Copyright 2016 - 2024 Anton Tananaev (anton@traccar.org)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -15,21 +15,13 @@
*/
package org.traccar.handler.events;
-import java.util.Collections;
-import java.util.Map;
-
-import io.netty.channel.ChannelHandler;
+import jakarta.inject.Inject;
import org.traccar.config.Config;
import org.traccar.config.Keys;
import org.traccar.model.Event;
import org.traccar.model.Position;
import org.traccar.session.cache.CacheManager;
-import jakarta.inject.Inject;
-import jakarta.inject.Singleton;
-
-@Singleton
-@ChannelHandler.Sharable
public class AlertEventHandler extends BaseEventHandler {
private final CacheManager cacheManager;
@@ -42,7 +34,7 @@ public class AlertEventHandler extends BaseEventHandler {
}
@Override
- protected Map<Event, Position> analyzePosition(Position position) {
+ public void analyzePosition(Position position, Callback callback) {
Object alarm = position.getAttributes().get(Position.KEY_ALARM);
if (alarm != null) {
boolean ignoreAlert = false;
@@ -55,10 +47,9 @@ public class AlertEventHandler extends BaseEventHandler {
if (!ignoreAlert) {
Event event = new Event(Event.TYPE_ALARM, position);
event.set(Position.KEY_ALARM, (String) alarm);
- return Collections.singletonMap(event, position);
+ callback.eventDetected(event);
}
}
- return null;
}
}
diff --git a/src/main/java/org/traccar/handler/events/BaseEventHandler.java b/src/main/java/org/traccar/handler/events/BaseEventHandler.java
index 4a4fb40ff..009c83145 100644
--- a/src/main/java/org/traccar/handler/events/BaseEventHandler.java
+++ b/src/main/java/org/traccar/handler/events/BaseEventHandler.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2016 - 2022 Anton Tananaev (anton@traccar.org)
+ * Copyright 2016 - 2024 Anton Tananaev (anton@traccar.org)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -15,33 +15,17 @@
*/
package org.traccar.handler.events;
-import java.util.Map;
-
-import org.traccar.BaseDataHandler;
-import org.traccar.database.NotificationManager;
import org.traccar.model.Event;
import org.traccar.model.Position;
-import jakarta.inject.Inject;
-
-public abstract class BaseEventHandler extends BaseDataHandler {
-
- private NotificationManager notificationManager;
+public abstract class BaseEventHandler {
- @Inject
- public void setNotificationManager(NotificationManager notificationManager) {
- this.notificationManager = notificationManager;
+ public interface Callback {
+ void eventDetected(Event event);
}
- @Override
- protected Position handlePosition(Position position) {
- Map<Event, Position> events = analyzePosition(position);
- if (events != null && !events.isEmpty()) {
- notificationManager.updateEvents(events);
- }
- return position;
- }
-
- protected abstract Map<Event, Position> analyzePosition(Position position);
-
+ /**
+ * Event handlers should be processed synchronously.
+ */
+ public abstract void analyzePosition(Position position, Callback callback);
}
diff --git a/src/main/java/org/traccar/handler/events/BehaviorEventHandler.java b/src/main/java/org/traccar/handler/events/BehaviorEventHandler.java
index 08ae35fcd..d654e18ce 100644
--- a/src/main/java/org/traccar/handler/events/BehaviorEventHandler.java
+++ b/src/main/java/org/traccar/handler/events/BehaviorEventHandler.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2021 - 2022 Anton Tananaev (anton@traccar.org)
+ * Copyright 2021 - 2024 Anton Tananaev (anton@traccar.org)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*/
package org.traccar.handler.events;
-import io.netty.channel.ChannelHandler;
+import jakarta.inject.Inject;
import org.traccar.config.Config;
import org.traccar.config.Keys;
import org.traccar.helper.UnitsConverter;
@@ -23,13 +23,6 @@ import org.traccar.model.Event;
import org.traccar.model.Position;
import org.traccar.session.cache.CacheManager;
-import jakarta.inject.Inject;
-import jakarta.inject.Singleton;
-import java.util.Collections;
-import java.util.Map;
-
-@Singleton
-@ChannelHandler.Sharable
public class BehaviorEventHandler extends BaseEventHandler {
private final double accelerationThreshold;
@@ -45,7 +38,7 @@ public class BehaviorEventHandler extends BaseEventHandler {
}
@Override
- protected Map<Event, Position> analyzePosition(Position position) {
+ public void analyzePosition(Position position, Callback callback) {
Position lastPosition = cacheManager.getPosition(position.getDeviceId());
if (lastPosition != null && position.getFixTime().equals(lastPosition.getFixTime())) {
@@ -54,14 +47,13 @@ public class BehaviorEventHandler extends BaseEventHandler {
if (accelerationThreshold != 0 && acceleration >= accelerationThreshold) {
Event event = new Event(Event.TYPE_ALARM, position);
event.set(Position.KEY_ALARM, Position.ALARM_ACCELERATION);
- return Collections.singletonMap(event, position);
+ callback.eventDetected(event);
} else if (brakingThreshold != 0 && acceleration <= -brakingThreshold) {
Event event = new Event(Event.TYPE_ALARM, position);
event.set(Position.KEY_ALARM, Position.ALARM_BRAKING);
- return Collections.singletonMap(event, position);
+ callback.eventDetected(event);
}
}
- return null;
}
}
diff --git a/src/main/java/org/traccar/handler/events/CommandResultEventHandler.java b/src/main/java/org/traccar/handler/events/CommandResultEventHandler.java
index b70f8f33b..b98807b23 100644
--- a/src/main/java/org/traccar/handler/events/CommandResultEventHandler.java
+++ b/src/main/java/org/traccar/handler/events/CommandResultEventHandler.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2016 - 2022 Anton Tananaev (anton@traccar.org)
+ * Copyright 2016 - 2024 Anton Tananaev (anton@traccar.org)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -15,18 +15,10 @@
*/
package org.traccar.handler.events;
-import java.util.Collections;
-import java.util.Map;
-
-import io.netty.channel.ChannelHandler;
+import jakarta.inject.Inject;
import org.traccar.model.Event;
import org.traccar.model.Position;
-import jakarta.inject.Inject;
-import jakarta.inject.Singleton;
-
-@Singleton
-@ChannelHandler.Sharable
public class CommandResultEventHandler extends BaseEventHandler {
@Inject
@@ -34,14 +26,13 @@ public class CommandResultEventHandler extends BaseEventHandler {
}
@Override
- protected Map<Event, Position> analyzePosition(Position position) {
+ public void analyzePosition(Position position, Callback callback) {
Object commandResult = position.getAttributes().get(Position.KEY_RESULT);
if (commandResult != null) {
Event event = new Event(Event.TYPE_COMMAND_RESULT, position);
event.set(Position.KEY_RESULT, (String) commandResult);
- return Collections.singletonMap(event, position);
+ callback.eventDetected(event);
}
- return null;
}
}
diff --git a/src/main/java/org/traccar/handler/events/DriverEventHandler.java b/src/main/java/org/traccar/handler/events/DriverEventHandler.java
index b68327983..31f8d2b4b 100644
--- a/src/main/java/org/traccar/handler/events/DriverEventHandler.java
+++ b/src/main/java/org/traccar/handler/events/DriverEventHandler.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2017 - 2022 Anton Tananaev (anton@traccar.org)
+ * Copyright 2017 - 2024 Anton Tananaev (anton@traccar.org)
* Copyright 2017 Andrey Kunitsyn (andrey@traccar.org)
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -16,19 +16,12 @@
*/
package org.traccar.handler.events;
-import io.netty.channel.ChannelHandler;
+import jakarta.inject.Inject;
import org.traccar.helper.model.PositionUtil;
import org.traccar.model.Event;
import org.traccar.model.Position;
import org.traccar.session.cache.CacheManager;
-import jakarta.inject.Inject;
-import jakarta.inject.Singleton;
-import java.util.Collections;
-import java.util.Map;
-
-@Singleton
-@ChannelHandler.Sharable
public class DriverEventHandler extends BaseEventHandler {
private final CacheManager cacheManager;
@@ -39,9 +32,9 @@ public class DriverEventHandler extends BaseEventHandler {
}
@Override
- protected Map<Event, Position> analyzePosition(Position position) {
+ public void analyzePosition(Position position, Callback callback) {
if (!PositionUtil.isLatest(cacheManager, position)) {
- return null;
+ return;
}
String driverUniqueId = position.getString(Position.KEY_DRIVER_UNIQUE_ID);
if (driverUniqueId != null) {
@@ -53,10 +46,9 @@ public class DriverEventHandler extends BaseEventHandler {
if (!driverUniqueId.equals(oldDriverUniqueId)) {
Event event = new Event(Event.TYPE_DRIVER_CHANGED, position);
event.set(Position.KEY_DRIVER_UNIQUE_ID, driverUniqueId);
- return Collections.singletonMap(event, position);
+ callback.eventDetected(event);
}
}
- return null;
}
}
diff --git a/src/main/java/org/traccar/handler/events/FuelEventHandler.java b/src/main/java/org/traccar/handler/events/FuelEventHandler.java
index e5085ecc2..c5675f51d 100644
--- a/src/main/java/org/traccar/handler/events/FuelEventHandler.java
+++ b/src/main/java/org/traccar/handler/events/FuelEventHandler.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2017 - 2023 Anton Tananaev (anton@traccar.org)
+ * Copyright 2017 - 2024 Anton Tananaev (anton@traccar.org)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*/
package org.traccar.handler.events;
-import io.netty.channel.ChannelHandler;
+import jakarta.inject.Inject;
import org.traccar.config.Keys;
import org.traccar.helper.model.AttributeUtil;
import org.traccar.helper.model.PositionUtil;
@@ -24,12 +24,6 @@ import org.traccar.model.Event;
import org.traccar.model.Position;
import org.traccar.session.cache.CacheManager;
-import jakarta.inject.Inject;
-import jakarta.inject.Singleton;
-import java.util.Map;
-
-@Singleton
-@ChannelHandler.Sharable
public class FuelEventHandler extends BaseEventHandler {
private final CacheManager cacheManager;
@@ -40,14 +34,14 @@ public class FuelEventHandler extends BaseEventHandler {
}
@Override
- protected Map<Event, Position> analyzePosition(Position position) {
+ public void analyzePosition(Position position, Callback callback) {
Device device = cacheManager.getObject(Device.class, position.getDeviceId());
if (device == null) {
- return null;
+ return;
}
if (!PositionUtil.isLatest(cacheManager, position)) {
- return null;
+ return;
}
if (position.hasAttribute(Position.KEY_FUEL_LEVEL)) {
@@ -61,19 +55,17 @@ public class FuelEventHandler extends BaseEventHandler {
double threshold = AttributeUtil.lookup(
cacheManager, Keys.EVENT_FUEL_INCREASE_THRESHOLD, position.getDeviceId());
if (threshold > 0 && change >= threshold) {
- return Map.of(new Event(Event.TYPE_DEVICE_FUEL_INCREASE, position), position);
+ callback.eventDetected(new Event(Event.TYPE_DEVICE_FUEL_INCREASE, position));
}
} else if (change < 0) {
double threshold = AttributeUtil.lookup(
cacheManager, Keys.EVENT_FUEL_DROP_THRESHOLD, position.getDeviceId());
if (threshold > 0 && Math.abs(change) >= threshold) {
- return Map.of(new Event(Event.TYPE_DEVICE_FUEL_DROP, position), position);
+ callback.eventDetected(new Event(Event.TYPE_DEVICE_FUEL_DROP, position));
}
}
}
}
-
- return null;
}
}
diff --git a/src/main/java/org/traccar/handler/events/GeofenceEventHandler.java b/src/main/java/org/traccar/handler/events/GeofenceEventHandler.java
index dbe2b8118..c8ecfb1ed 100644
--- a/src/main/java/org/traccar/handler/events/GeofenceEventHandler.java
+++ b/src/main/java/org/traccar/handler/events/GeofenceEventHandler.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2016 - 2023 Anton Tananaev (anton@traccar.org)
+ * Copyright 2016 - 2024 Anton Tananaev (anton@traccar.org)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*/
package org.traccar.handler.events;
-import io.netty.channel.ChannelHandler;
+import jakarta.inject.Inject;
import org.traccar.helper.model.PositionUtil;
import org.traccar.model.Calendar;
import org.traccar.model.Event;
@@ -23,15 +23,9 @@ import org.traccar.model.Geofence;
import org.traccar.model.Position;
import org.traccar.session.cache.CacheManager;
-import jakarta.inject.Inject;
-import jakarta.inject.Singleton;
import java.util.ArrayList;
-import java.util.HashMap;
import java.util.List;
-import java.util.Map;
-@Singleton
-@ChannelHandler.Sharable
public class GeofenceEventHandler extends BaseEventHandler {
private final CacheManager cacheManager;
@@ -42,9 +36,9 @@ public class GeofenceEventHandler extends BaseEventHandler {
}
@Override
- protected Map<Event, Position> analyzePosition(Position position) {
+ public void analyzePosition(Position position, Callback callback) {
if (!PositionUtil.isLatest(cacheManager, position)) {
- return null;
+ return;
}
List<Long> oldGeofences = new ArrayList<>();
@@ -60,7 +54,6 @@ public class GeofenceEventHandler extends BaseEventHandler {
oldGeofences.removeAll(position.getGeofenceIds());
}
- Map<Event, Position> events = new HashMap<>();
for (long geofenceId : oldGeofences) {
Geofence geofence = cacheManager.getObject(Geofence.class, geofenceId);
if (geofence != null) {
@@ -69,7 +62,7 @@ public class GeofenceEventHandler extends BaseEventHandler {
if (calendar == null || calendar.checkMoment(position.getFixTime())) {
Event event = new Event(Event.TYPE_GEOFENCE_EXIT, position);
event.setGeofenceId(geofenceId);
- events.put(event, position);
+ callback.eventDetected(event);
}
}
}
@@ -79,10 +72,8 @@ public class GeofenceEventHandler extends BaseEventHandler {
if (calendar == null || calendar.checkMoment(position.getFixTime())) {
Event event = new Event(Event.TYPE_GEOFENCE_ENTER, position);
event.setGeofenceId(geofenceId);
- events.put(event, position);
+ callback.eventDetected(event);
}
}
- return events;
}
-
}
diff --git a/src/main/java/org/traccar/handler/events/IgnitionEventHandler.java b/src/main/java/org/traccar/handler/events/IgnitionEventHandler.java
index ba4159a42..bbf9fadd1 100644
--- a/src/main/java/org/traccar/handler/events/IgnitionEventHandler.java
+++ b/src/main/java/org/traccar/handler/events/IgnitionEventHandler.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2016 - 2022 Anton Tananaev (anton@traccar.org)
+ * Copyright 2016 - 2024 Anton Tananaev (anton@traccar.org)
* Copyright 2016 Andrey Kunitsyn (andrey@traccar.org)
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -16,21 +16,13 @@
*/
package org.traccar.handler.events;
-import java.util.Collections;
-import java.util.Map;
-
-import io.netty.channel.ChannelHandler;
+import jakarta.inject.Inject;
import org.traccar.helper.model.PositionUtil;
import org.traccar.model.Device;
import org.traccar.model.Event;
import org.traccar.model.Position;
import org.traccar.session.cache.CacheManager;
-import jakarta.inject.Inject;
-import jakarta.inject.Singleton;
-
-@Singleton
-@ChannelHandler.Sharable
public class IgnitionEventHandler extends BaseEventHandler {
private final CacheManager cacheManager;
@@ -41,14 +33,12 @@ public class IgnitionEventHandler extends BaseEventHandler {
}
@Override
- protected Map<Event, Position> analyzePosition(Position position) {
+ public void analyzePosition(Position position, Callback callback) {
Device device = cacheManager.getObject(Device.class, position.getDeviceId());
if (device == null || !PositionUtil.isLatest(cacheManager, position)) {
- return null;
+ return;
}
- Map<Event, Position> result = null;
-
if (position.hasAttribute(Position.KEY_IGNITION)) {
boolean ignition = position.getBoolean(Position.KEY_IGNITION);
@@ -57,15 +47,12 @@ public class IgnitionEventHandler extends BaseEventHandler {
boolean oldIgnition = lastPosition.getBoolean(Position.KEY_IGNITION);
if (ignition && !oldIgnition) {
- result = Collections.singletonMap(
- new Event(Event.TYPE_IGNITION_ON, position), position);
+ callback.eventDetected(new Event(Event.TYPE_IGNITION_ON, position));
} else if (!ignition && oldIgnition) {
- result = Collections.singletonMap(
- new Event(Event.TYPE_IGNITION_OFF, position), position);
+ callback.eventDetected(new Event(Event.TYPE_IGNITION_OFF, position));
}
}
}
- return result;
}
}
diff --git a/src/main/java/org/traccar/handler/events/MaintenanceEventHandler.java b/src/main/java/org/traccar/handler/events/MaintenanceEventHandler.java
index 2fa2e8869..573ad4ad6 100644
--- a/src/main/java/org/traccar/handler/events/MaintenanceEventHandler.java
+++ b/src/main/java/org/traccar/handler/events/MaintenanceEventHandler.java
@@ -16,20 +16,12 @@
*/
package org.traccar.handler.events;
-import java.util.HashMap;
-import java.util.Map;
-
-import io.netty.channel.ChannelHandler;
+import jakarta.inject.Inject;
import org.traccar.model.Event;
import org.traccar.model.Maintenance;
import org.traccar.model.Position;
import org.traccar.session.cache.CacheManager;
-import jakarta.inject.Inject;
-import jakarta.inject.Singleton;
-
-@Singleton
-@ChannelHandler.Sharable
public class MaintenanceEventHandler extends BaseEventHandler {
private final CacheManager cacheManager;
@@ -40,13 +32,12 @@ public class MaintenanceEventHandler extends BaseEventHandler {
}
@Override
- protected Map<Event, Position> analyzePosition(Position position) {
+ public void analyzePosition(Position position, Callback callback) {
Position lastPosition = cacheManager.getPosition(position.getDeviceId());
if (lastPosition == null || position.getFixTime().compareTo(lastPosition.getFixTime()) < 0) {
- return null;
+ return;
}
- Map<Event, Position> events = new HashMap<>();
for (Maintenance maintenance : cacheManager.getDeviceObjects(position.getDeviceId(), Maintenance.class)) {
if (maintenance.getPeriod() != 0) {
double oldValue = getValue(lastPosition, maintenance.getType());
@@ -58,13 +49,11 @@ public class MaintenanceEventHandler extends BaseEventHandler {
Event event = new Event(Event.TYPE_MAINTENANCE, position);
event.setMaintenanceId(maintenance.getId());
event.set(maintenance.getType(), newValue);
- events.put(event, position);
+ callback.eventDetected(event);
}
}
}
}
-
- return events;
}
private double getValue(Position position, String type) {
diff --git a/src/main/java/org/traccar/handler/events/MediaEventHandler.java b/src/main/java/org/traccar/handler/events/MediaEventHandler.java
index 52d8e6961..2745296c4 100644
--- a/src/main/java/org/traccar/handler/events/MediaEventHandler.java
+++ b/src/main/java/org/traccar/handler/events/MediaEventHandler.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2022 Anton Tananaev (anton@traccar.org)
+ * Copyright 2022 - 2024 Anton Tananaev (anton@traccar.org)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -15,18 +15,12 @@
*/
package org.traccar.handler.events;
-import io.netty.channel.ChannelHandler;
+import jakarta.inject.Inject;
import org.traccar.model.Event;
import org.traccar.model.Position;
-import jakarta.inject.Inject;
-import jakarta.inject.Singleton;
-import java.util.Map;
-import java.util.stream.Collectors;
import java.util.stream.Stream;
-@Singleton
-@ChannelHandler.Sharable
public class MediaEventHandler extends BaseEventHandler {
@Inject
@@ -34,8 +28,8 @@ public class MediaEventHandler extends BaseEventHandler {
}
@Override
- protected Map<Event, Position> analyzePosition(Position position) {
- return Stream.of(Position.KEY_IMAGE, Position.KEY_VIDEO, Position.KEY_AUDIO)
+ public void analyzePosition(Position position, Callback callback) {
+ Stream.of(Position.KEY_IMAGE, Position.KEY_VIDEO, Position.KEY_AUDIO)
.filter(position::hasAttribute)
.map(type -> {
Event event = new Event(Event.TYPE_MEDIA, position);
@@ -43,7 +37,7 @@ public class MediaEventHandler extends BaseEventHandler {
event.set("file", position.getString(type));
return event;
})
- .collect(Collectors.toMap(event -> event, event -> position));
+ .forEach(callback::eventDetected);
}
}
diff --git a/src/main/java/org/traccar/handler/events/MotionEventHandler.java b/src/main/java/org/traccar/handler/events/MotionEventHandler.java
index 15902d6d4..41d68985b 100644
--- a/src/main/java/org/traccar/handler/events/MotionEventHandler.java
+++ b/src/main/java/org/traccar/handler/events/MotionEventHandler.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2016 - 2023 Anton Tananaev (anton@traccar.org)
+ * Copyright 2016 - 2024 Anton Tananaev (anton@traccar.org)
* Copyright 2017 Andrey Kunitsyn (andrey@traccar.org)
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -16,14 +16,13 @@
*/
package org.traccar.handler.events;
-import io.netty.channel.ChannelHandler;
+import jakarta.inject.Inject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.traccar.config.Keys;
import org.traccar.helper.model.AttributeUtil;
import org.traccar.helper.model.PositionUtil;
import org.traccar.model.Device;
-import org.traccar.model.Event;
import org.traccar.model.Position;
import org.traccar.reports.common.TripsConfig;
import org.traccar.session.cache.CacheManager;
@@ -35,13 +34,6 @@ import org.traccar.storage.query.Columns;
import org.traccar.storage.query.Condition;
import org.traccar.storage.query.Request;
-import jakarta.inject.Inject;
-import jakarta.inject.Singleton;
-import java.util.Collections;
-import java.util.Map;
-
-@Singleton
-@ChannelHandler.Sharable
public class MotionEventHandler extends BaseEventHandler {
private static final Logger LOGGER = LoggerFactory.getLogger(MotionEventHandler.class);
@@ -56,17 +48,17 @@ public class MotionEventHandler extends BaseEventHandler {
}
@Override
- protected Map<Event, Position> analyzePosition(Position position) {
+ public void analyzePosition(Position position, Callback callback) {
long deviceId = position.getDeviceId();
Device device = cacheManager.getObject(Device.class, deviceId);
if (device == null || !PositionUtil.isLatest(cacheManager, position)) {
- return null;
+ return;
}
boolean processInvalid = AttributeUtil.lookup(
cacheManager, Keys.EVENT_MOTION_PROCESS_INVALID_POSITIONS, deviceId);
if (!processInvalid && !position.getValid()) {
- return null;
+ return;
}
TripsConfig tripsConfig = new TripsConfig(new AttributeUtil.CacheProvider(cacheManager, deviceId));
@@ -82,7 +74,9 @@ public class MotionEventHandler extends BaseEventHandler {
LOGGER.warn("Update device motion error", e);
}
}
- return state.getEvent() != null ? Collections.singletonMap(state.getEvent(), position) : null;
+ if (state.getEvent() != null) {
+ callback.eventDetected(state.getEvent());
+ }
}
}
diff --git a/src/main/java/org/traccar/handler/events/OverspeedEventHandler.java b/src/main/java/org/traccar/handler/events/OverspeedEventHandler.java
index 3bb5f713c..9598581e6 100644
--- a/src/main/java/org/traccar/handler/events/OverspeedEventHandler.java
+++ b/src/main/java/org/traccar/handler/events/OverspeedEventHandler.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2016 - 2023 Anton Tananaev (anton@traccar.org)
+ * Copyright 2016 - 2024 Anton Tananaev (anton@traccar.org)
* Copyright 2018 Andrey Kunitsyn (andrey@traccar.org)
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -16,7 +16,7 @@
*/
package org.traccar.handler.events;
-import io.netty.channel.ChannelHandler;
+import jakarta.inject.Inject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.traccar.config.Config;
@@ -24,7 +24,6 @@ import org.traccar.config.Keys;
import org.traccar.helper.model.AttributeUtil;
import org.traccar.helper.model.PositionUtil;
import org.traccar.model.Device;
-import org.traccar.model.Event;
import org.traccar.model.Geofence;
import org.traccar.model.Position;
import org.traccar.session.cache.CacheManager;
@@ -36,13 +35,6 @@ import org.traccar.storage.query.Columns;
import org.traccar.storage.query.Condition;
import org.traccar.storage.query.Request;
-import jakarta.inject.Inject;
-import jakarta.inject.Singleton;
-import java.util.Collections;
-import java.util.Map;
-
-@Singleton
-@ChannelHandler.Sharable
public class OverspeedEventHandler extends BaseEventHandler {
private static final Logger LOGGER = LoggerFactory.getLogger(OverspeedEventHandler.class);
@@ -55,8 +47,7 @@ public class OverspeedEventHandler extends BaseEventHandler {
private final double multiplier;
@Inject
- public OverspeedEventHandler(
- Config config, CacheManager cacheManager, Storage storage) {
+ public OverspeedEventHandler(Config config, CacheManager cacheManager, Storage storage) {
this.cacheManager = cacheManager;
this.storage = storage;
minimalDuration = config.getLong(Keys.EVENT_OVERSPEED_MINIMAL_DURATION) * 1000;
@@ -65,15 +56,15 @@ public class OverspeedEventHandler extends BaseEventHandler {
}
@Override
- protected Map<Event, Position> analyzePosition(Position position) {
+ public void analyzePosition(Position position, Callback callback) {
long deviceId = position.getDeviceId();
Device device = cacheManager.getObject(Device.class, position.getDeviceId());
if (device == null) {
- return null;
+ return;
}
if (!PositionUtil.isLatest(cacheManager, position) || !position.getValid()) {
- return null;
+ return;
}
double speedLimit = AttributeUtil.lookup(cacheManager, Keys.EVENT_OVERSPEED_LIMIT, deviceId);
@@ -105,7 +96,7 @@ public class OverspeedEventHandler extends BaseEventHandler {
}
if (speedLimit == 0) {
- return null;
+ return;
}
OverspeedState state = OverspeedState.fromDevice(device);
@@ -120,7 +111,9 @@ public class OverspeedEventHandler extends BaseEventHandler {
LOGGER.warn("Update device overspeed error", e);
}
}
- return state.getEvent() != null ? Collections.singletonMap(state.getEvent(), position) : null;
+ if (state.getEvent() != null) {
+ callback.eventDetected(state.getEvent());
+ }
}
}