diff options
author | drecchia <danilo@deltatecnologia.com> | 2016-06-01 21:08:05 -0300 |
---|---|---|
committer | drecchia <danilo@deltatecnologia.com> | 2016-06-01 21:08:05 -0300 |
commit | e4ba1ebf54838041fae352d95e399b1fb3483458 (patch) | |
tree | 334626820ff4efa4583bb5257d19a18cd0ebf631 /src/org/traccar/database | |
parent | 5df7c128af15e9d1021b7570f081185f14467f09 (diff) | |
parent | d2c85b59bde4729d027ef1bb6e874d1fd1a02c68 (diff) | |
download | trackermap-server-e4ba1ebf54838041fae352d95e399b1fb3483458.tar.gz trackermap-server-e4ba1ebf54838041fae352d95e399b1fb3483458.tar.bz2 trackermap-server-e4ba1ebf54838041fae352d95e399b1fb3483458.zip |
Merge branch 'master' of https://github.com/tananaev/traccar
Conflicts:
src/org/traccar/database/DataManager.java
Diffstat (limited to 'src/org/traccar/database')
-rw-r--r-- | src/org/traccar/database/ConnectionManager.java | 42 | ||||
-rw-r--r-- | src/org/traccar/database/DataManager.java | 36 |
2 files changed, 72 insertions, 6 deletions
diff --git a/src/org/traccar/database/ConnectionManager.java b/src/org/traccar/database/ConnectionManager.java index bb9958232..9e0da8485 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.TYPE_DEVICE_OFFLINE, deviceId); + if (status.equals(Device.STATUS_ONLINE)) { + event.setType(Event.TYPE_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 19560db5c..839cf8cad 100644 --- a/src/org/traccar/database/DataManager.java +++ b/src/org/traccar/database/DataManager.java @@ -21,6 +21,7 @@ import java.net.URL; import java.net.URLClassLoader; import java.sql.SQLException; import java.util.ArrayList; +import java.util.Calendar; import java.util.Collection; import java.util.Date; import java.util.HashMap; @@ -46,6 +47,7 @@ import org.traccar.Context; import org.traccar.helper.Log; import org.traccar.model.Device; import org.traccar.model.DevicePermission; +import org.traccar.model.Event; import org.traccar.model.Group; import org.traccar.model.GroupPermission; import org.traccar.model.Position; @@ -363,6 +365,9 @@ public class DataManager implements IdentityManager { QueryBuilder.create(dataSource, getQuery("database.updateDeviceStatus")) .setObject(device) .executeUpdate(); + Device cachedDevice = getDeviceById(device.getId()); + cachedDevice.setStatus(device.getStatus()); + cachedDevice.setMotion(device.getMotion()); } public void removeDevice(long deviceId) throws SQLException { @@ -471,6 +476,8 @@ public class DataManager implements IdentityManager { .setDate("now", new Date()) .setObject(position) .executeUpdate(); + Device device = getDeviceById(position.getDeviceId()); + device.setPositionId(position.getId()); } public Collection<Position> getLatestPositions() throws SQLException { @@ -488,4 +495,33 @@ 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, int interval) throws SQLException { + Calendar calendar = Calendar.getInstance(); + calendar.add(Calendar.SECOND, -interval); + Date to = calendar.getTime(); + return getEvents(deviceId, type, new Date(), to); + } + } |