aboutsummaryrefslogtreecommitdiff
path: root/src/org/traccar/database
diff options
context:
space:
mode:
authorAbyss777 <abyss@fox5.ru>2016-05-26 16:14:52 +0500
committerAbyss777 <abyss@fox5.ru>2016-05-26 16:14:52 +0500
commitc6cc8a87eb593dbf765814d1aaa09d5d231fa7fe (patch)
tree8b0cddcc79476a3252c8aec0946bd6e8e016b475 /src/org/traccar/database
parentaa12e5c750e771016545269ffa39409b06b47eee (diff)
downloadtraccar-server-c6cc8a87eb593dbf765814d1aaa09d5d231fa7fe.tar.gz
traccar-server-c6cc8a87eb593dbf765814d1aaa09d5d231fa7fe.tar.bz2
traccar-server-c6cc8a87eb593dbf765814d1aaa09d5d231fa7fe.zip
Events subsystem
Diffstat (limited to 'src/org/traccar/database')
-rw-r--r--src/org/traccar/database/ConnectionManager.java42
-rw-r--r--src/org/traccar/database/DataManager.java31
2 files changed, 67 insertions, 6 deletions
diff --git a/src/org/traccar/database/ConnectionManager.java b/src/org/traccar/database/ConnectionManager.java
index bb9958232..d6728357c 100644
--- a/src/org/traccar/database/ConnectionManager.java
+++ b/src/org/traccar/database/ConnectionManager.java
@@ -23,6 +23,7 @@ import org.traccar.GlobalTimer;
import org.traccar.Protocol;
import org.traccar.helper.Log;
import org.traccar.model.Device;
+import org.traccar.model.Event;
import org.traccar.model.Position;
import java.net.SocketAddress;
@@ -85,14 +86,26 @@ public class ConnectionManager {
return;
}
- device.setStatus(status);
- if (time != null) {
- device.setLastUpdate(time);
+ if (status.equals(Device.STATUS_MOVING) || status.equals(Device.STATUS_STOPPED)) {
+ device.setMotion(status);
+ } else {
+ if (!status.equals(device.getStatus())) {
+ Event event = new Event(Event.DEVICE_OFFLINE, deviceId);
+ if (status.equals(Device.STATUS_ONLINE)) {
+ event.setType(Event.DEVICE_ONLINE);
+ }
+ updateEvent(event);
+ }
+ device.setStatus(status);
+
+ Timeout timeout = timeouts.remove(deviceId);
+ if (timeout != null) {
+ timeout.cancel();
+ }
}
- Timeout timeout = timeouts.remove(deviceId);
- if (timeout != null) {
- timeout.cancel();
+ if (time != null) {
+ device.setLastUpdate(time);
}
if (status.equals(Device.STATUS_ONLINE)) {
@@ -134,6 +147,22 @@ public class ConnectionManager {
}
}
+ public synchronized void updateEvent(Event event) {
+ long deviceId = event.getDeviceId();
+ try {
+ Context.getDataManager().addEvent(event);
+ } catch (SQLException error) {
+ Log.warning(error);
+ }
+ for (long userId : Context.getPermissionsManager().getDeviceUsers(deviceId)) {
+ if (listeners.containsKey(userId)) {
+ for (UpdateListener listener : listeners.get(userId)) {
+ listener.onUpdateEvent(event);
+ }
+ }
+ }
+ }
+
public Position getLastPosition(long deviceId) {
return positions.get(deviceId);
}
@@ -154,6 +183,7 @@ public class ConnectionManager {
public interface UpdateListener {
void onUpdateDevice(Device device);
void onUpdatePosition(Position position);
+ void onUpdateEvent(Event event);
}
public synchronized void addListener(long userId, UpdateListener listener) {
diff --git a/src/org/traccar/database/DataManager.java b/src/org/traccar/database/DataManager.java
index ac3be45ac..4e14f6c97 100644
--- a/src/org/traccar/database/DataManager.java
+++ b/src/org/traccar/database/DataManager.java
@@ -27,6 +27,7 @@ import org.traccar.Config;
import org.traccar.Context;
import org.traccar.helper.Log;
import org.traccar.model.Device;
+import org.traccar.model.Event;
import org.traccar.model.DevicePermission;
import org.traccar.model.Group;
import org.traccar.model.GroupPermission;
@@ -482,4 +483,34 @@ public class DataManager implements IdentityManager {
.setObject(server)
.executeUpdate();
}
+
+ public Event getEvent(long eventId) throws SQLException {
+ return QueryBuilder.create(dataSource, getQuery("database.selectEvent"))
+ .setLong("id", eventId)
+ .executeQuerySingle(Event.class);
+ }
+
+ public void addEvent(Event event) throws SQLException {
+ event.setId(QueryBuilder.create(dataSource, getQuery("database.insertEvent"), true)
+ .setObject(event)
+ .executeUpdate());
+ }
+
+ public Collection<Event> getEvents(long deviceId, String type, Date from, Date to) throws SQLException {
+ return QueryBuilder.create(dataSource, getQuery("database.selectEvents"))
+ .setLong("deviceId", deviceId)
+ .setString("type", type)
+ .setDate("from", from)
+ .setDate("to", to)
+ .executeQuery(Event.class);
+ }
+
+ public Collection<Event> getLastEvents(long deviceId, String type, long interval) throws SQLException {
+ return QueryBuilder.create(dataSource, getQuery("database.selectLastEvents"))
+ .setLong("deviceId", deviceId)
+ .setString("type", type)
+ .setLong("interval", interval)
+ .executeQuery(Event.class);
+ }
+
}