diff options
author | Abyss777 <abyss@fox5.ru> | 2016-06-02 11:54:13 +0500 |
---|---|---|
committer | Abyss777 <abyss@fox5.ru> | 2016-06-02 11:54:13 +0500 |
commit | bf296b4af4714a3fe62cd6f9fcff8ac29fcd0178 (patch) | |
tree | 93ca4a4e78d7313c4d14aac8332a818c5ad1f327 /src/org/traccar | |
parent | 06a746b44dae69b0c84a5302f92a1bcbe2dc827f (diff) | |
download | traccar-server-bf296b4af4714a3fe62cd6f9fcff8ac29fcd0178.tar.gz traccar-server-bf296b4af4714a3fe62cd6f9fcff8ac29fcd0178.tar.bz2 traccar-server-bf296b4af4714a3fe62cd6f9fcff8ac29fcd0178.zip |
Send position with event to websocket
Diffstat (limited to 'src/org/traccar')
-rw-r--r-- | src/org/traccar/BaseEventHandler.java | 2 | ||||
-rw-r--r-- | src/org/traccar/api/AsyncSocket.java | 30 | ||||
-rw-r--r-- | src/org/traccar/database/ConnectionManager.java | 8 |
3 files changed, 27 insertions, 13 deletions
diff --git a/src/org/traccar/BaseEventHandler.java b/src/org/traccar/BaseEventHandler.java index fde57748c..3e3317f0a 100644 --- a/src/org/traccar/BaseEventHandler.java +++ b/src/org/traccar/BaseEventHandler.java @@ -25,7 +25,7 @@ public abstract class BaseEventHandler extends BaseDataHandler { Event event = analizePosition(position); if (event != null) { - Context.getConnectionManager().updateEvent(event); + Context.getConnectionManager().updateEvent(event, position); } return position; } diff --git a/src/org/traccar/api/AsyncSocket.java b/src/org/traccar/api/AsyncSocket.java index 2259f840f..76ec99406 100644 --- a/src/org/traccar/api/AsyncSocket.java +++ b/src/org/traccar/api/AsyncSocket.java @@ -28,6 +28,8 @@ import javax.json.Json; import javax.json.JsonObjectBuilder; import java.util.Collection; import java.util.Collections; +import java.util.HashMap; +import java.util.Map; public class AsyncSocket extends WebSocketAdapter implements ConnectionManager.UpdateListener { @@ -45,7 +47,9 @@ public class AsyncSocket extends WebSocketAdapter implements ConnectionManager.U public void onWebSocketConnect(Session session) { super.onWebSocketConnect(session); - sendData(KEY_POSITIONS, Context.getConnectionManager().getInitialState(userId)); + Map<String, Collection<?>> data = new HashMap<String, Collection<?>>(); + data.put(KEY_POSITIONS, Context.getConnectionManager().getInitialState(userId)); + sendData(data); Context.getConnectionManager().addListener(userId, this); } @@ -59,25 +63,35 @@ public class AsyncSocket extends WebSocketAdapter implements ConnectionManager.U @Override public void onUpdateDevice(Device device) { - sendData(KEY_DEVICES, Collections.singletonList(device)); + Map<String, Collection<?>> data = new HashMap<String, Collection<?>>(); + data.put(KEY_DEVICES, Collections.singletonList(device)); + sendData(data); } @Override public void onUpdatePosition(Position position) { - sendData(KEY_POSITIONS, Collections.singletonList(position)); + Map<String, Collection<?>> data = new HashMap<String, Collection<?>>(); + data.put(KEY_POSITIONS, Collections.singletonList(position)); + sendData(data); } @Override - public void onUpdateEvent(Event event) { - sendData(KEY_EVENTS, Collections.singletonList(event)); + public void onUpdateEvent(Event event, Position position) { + Map<String, Collection<?>> data = new HashMap<String, Collection<?>>(); + data.put(KEY_EVENTS, Collections.singletonList(event)); + if (position != null) { + data.put(KEY_POSITIONS, Collections.singletonList(position)); + } + sendData(data); } - private void sendData(String key, Collection<?> data) { + private void sendData(Map<String, Collection<?>> data) { if (!data.isEmpty() && isConnected()) { JsonObjectBuilder json = Json.createObjectBuilder(); - json.add(key, JsonConverter.arrayToJson(data)); + for (Map.Entry<String, Collection<?>> entry : data.entrySet()) { + json.add(entry.getKey(), JsonConverter.arrayToJson(entry.getValue())); + } getRemote().sendString(json.build().toString(), null); } } - } diff --git a/src/org/traccar/database/ConnectionManager.java b/src/org/traccar/database/ConnectionManager.java index 9e0da8485..ec5903548 100644 --- a/src/org/traccar/database/ConnectionManager.java +++ b/src/org/traccar/database/ConnectionManager.java @@ -94,7 +94,7 @@ public class ConnectionManager { if (status.equals(Device.STATUS_ONLINE)) { event.setType(Event.TYPE_DEVICE_ONLINE); } - updateEvent(event); + updateEvent(event, null); } device.setStatus(status); @@ -147,7 +147,7 @@ public class ConnectionManager { } } - public synchronized void updateEvent(Event event) { + public synchronized void updateEvent(Event event, Position position) { long deviceId = event.getDeviceId(); try { Context.getDataManager().addEvent(event); @@ -157,7 +157,7 @@ public class ConnectionManager { for (long userId : Context.getPermissionsManager().getDeviceUsers(deviceId)) { if (listeners.containsKey(userId)) { for (UpdateListener listener : listeners.get(userId)) { - listener.onUpdateEvent(event); + listener.onUpdateEvent(event, position); } } } @@ -183,7 +183,7 @@ public class ConnectionManager { public interface UpdateListener { void onUpdateDevice(Device device); void onUpdatePosition(Position position); - void onUpdateEvent(Event event); + void onUpdateEvent(Event event, Position position); } public synchronized void addListener(long userId, UpdateListener listener) { |