aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/traccar/session
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/org/traccar/session')
-rw-r--r--src/main/java/org/traccar/session/ConnectionManager.java11
-rw-r--r--src/main/java/org/traccar/session/cache/CacheManager.java8
2 files changed, 16 insertions, 3 deletions
diff --git a/src/main/java/org/traccar/session/ConnectionManager.java b/src/main/java/org/traccar/session/ConnectionManager.java
index 0e0ea1eb8..c2f602c11 100644
--- a/src/main/java/org/traccar/session/ConnectionManager.java
+++ b/src/main/java/org/traccar/session/ConnectionManager.java
@@ -285,7 +285,6 @@ public class ConnectionManager implements BroadcastInterface {
}
updateDevice(true, device);
- broadcastService.updateDevice(true, device);
}
public DeviceState getDeviceState(long deviceId) {
@@ -324,7 +323,9 @@ public class ConnectionManager implements BroadcastInterface {
@Override
public synchronized void updateDevice(boolean local, Device device) {
- if (!local && Device.STATUS_ONLINE.equals(device.getStatus())) {
+ if (local) {
+ broadcastService.updateDevice(true, device);
+ } else if (Device.STATUS_ONLINE.equals(device.getStatus())) {
timeouts.remove(device.getId());
removeDeviceSession(device.getId());
}
@@ -339,6 +340,9 @@ public class ConnectionManager implements BroadcastInterface {
@Override
public synchronized void updatePosition(boolean local, Position position) {
+ if (local) {
+ broadcastService.updatePosition(true, position);
+ }
for (long userId : deviceUsers.getOrDefault(position.getDeviceId(), Collections.emptySet())) {
if (listeners.containsKey(userId)) {
for (UpdateListener listener : listeners.get(userId)) {
@@ -350,6 +354,9 @@ public class ConnectionManager implements BroadcastInterface {
@Override
public synchronized void updateEvent(boolean local, long userId, Event event) {
+ if (local) {
+ broadcastService.updateEvent(true, userId, event);
+ }
if (listeners.containsKey(userId)) {
for (UpdateListener listener : listeners.get(userId)) {
listener.onUpdateEvent(event);
diff --git a/src/main/java/org/traccar/session/cache/CacheManager.java b/src/main/java/org/traccar/session/cache/CacheManager.java
index d2ada7d43..bc5fc357f 100644
--- a/src/main/java/org/traccar/session/cache/CacheManager.java
+++ b/src/main/java/org/traccar/session/cache/CacheManager.java
@@ -58,6 +58,7 @@ public class CacheManager implements BroadcastInterface {
private final Config config;
private final Storage storage;
+ private final BroadcastService broadcastService;
private final ReadWriteLock lock = new ReentrantReadWriteLock();
@@ -73,9 +74,10 @@ public class CacheManager implements BroadcastInterface {
public CacheManager(Config config, Storage storage, BroadcastService broadcastService) throws StorageException {
this.config = config;
this.storage = storage;
- broadcastService.registerListener(this);
+ this.broadcastService = broadcastService;
invalidateServer();
invalidateUsers();
+ broadcastService.registerListener(this);
}
public Config getConfig() {
@@ -198,6 +200,8 @@ public class CacheManager implements BroadcastInterface {
}
public <T extends BaseModel> void updateOrInvalidate(T object) throws StorageException {
+ broadcastService.invalidateObject(object.getClass(), object.getId());
+
boolean invalidate = false;
var before = getObject(object.getClass(), object.getId());
if (before == null) {
@@ -231,6 +235,8 @@ public class CacheManager implements BroadcastInterface {
public void invalidatePermission(
Class<? extends BaseModel> clazz1, long id1,
Class<? extends BaseModel> clazz2, long id2) {
+ broadcastService.invalidatePermission(clazz1, id1, clazz2, id2);
+
try {
invalidate(new CacheKey(clazz1, id1), new CacheKey(clazz2, id2));
} catch (StorageException e) {