aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/traccar/MainEventHandler.java
diff options
context:
space:
mode:
authorAnton Tananaev <anton@traccar.org>2022-06-18 11:08:32 -0700
committerAnton Tananaev <anton@traccar.org>2022-06-18 11:08:32 -0700
commitddbe4d7de6ae7590e2b927066312597efa129393 (patch)
tree777882e24ce5488b4cfc8a4d6f11119abcbeb7a3 /src/main/java/org/traccar/MainEventHandler.java
parent182656b6dc1fb5d167bb752c16ecf633add001a8 (diff)
downloadtrackermap-server-ddbe4d7de6ae7590e2b927066312597efa129393.tar.gz
trackermap-server-ddbe4d7de6ae7590e2b927066312597efa129393.tar.bz2
trackermap-server-ddbe4d7de6ae7590e2b927066312597efa129393.zip
Remove positions from manager
Diffstat (limited to 'src/main/java/org/traccar/MainEventHandler.java')
-rw-r--r--src/main/java/org/traccar/MainEventHandler.java28
1 files changed, 25 insertions, 3 deletions
diff --git a/src/main/java/org/traccar/MainEventHandler.java b/src/main/java/org/traccar/MainEventHandler.java
index 7fff2e13f..e1aee3cc8 100644
--- a/src/main/java/org/traccar/MainEventHandler.java
+++ b/src/main/java/org/traccar/MainEventHandler.java
@@ -28,10 +28,16 @@ import org.traccar.config.Keys;
import org.traccar.database.StatisticsManager;
import org.traccar.helper.DateUtil;
import org.traccar.helper.NetworkUtil;
+import org.traccar.helper.model.PositionUtil;
+import org.traccar.model.Device;
import org.traccar.model.Position;
import org.traccar.session.ConnectionManager;
import org.traccar.session.cache.CacheManager;
+import org.traccar.storage.Storage;
import org.traccar.storage.StorageException;
+import org.traccar.storage.query.Columns;
+import org.traccar.storage.query.Condition;
+import org.traccar.storage.query.Request;
import javax.inject.Inject;
import java.util.Arrays;
@@ -46,10 +52,15 @@ public class MainEventHandler extends ChannelInboundHandlerAdapter {
private final Set<String> connectionlessProtocols = new HashSet<>();
private final Set<String> logAttributes = new LinkedHashSet<>();
+ private final CacheManager cacheManager;
+ private final Storage storage;
private final ConnectionManager connectionManager;
@Inject
- public MainEventHandler(Config config, ConnectionManager connectionManager) {
+ public MainEventHandler(
+ Config config, CacheManager cacheManager, Storage storage, ConnectionManager connectionManager) {
+ this.cacheManager = cacheManager;
+ this.storage = storage;
this.connectionManager = connectionManager;
String connectionlessProtocolList = config.getString(Keys.STATUS_IGNORE_OFFLINE);
if (connectionlessProtocolList != null) {
@@ -64,8 +75,19 @@ public class MainEventHandler extends ChannelInboundHandlerAdapter {
Position position = (Position) msg;
try {
- Context.getDeviceManager().updateLatestPosition(position);
- Main.getInjector().getInstance(CacheManager.class).updatePosition(position);
+ if (PositionUtil.isLatest(cacheManager, position)) {
+ Device device = new Device();
+ device.setId(position.getDeviceId());
+ device.setPositionId(position.getId());
+ storage.updateObject(device, new Request(
+ new Columns.Include("positionId"),
+ new Condition.Equals("id", "id")));
+
+ cacheManager.updatePosition(position);
+ cacheManager.getObject(Device.class, position.getDeviceId()).setPositionId(position.getId());
+
+ connectionManager.updatePosition(position);
+ }
} catch (StorageException error) {
LOGGER.warn("Failed to update device", error);
}