From bf296b4af4714a3fe62cd6f9fcff8ac29fcd0178 Mon Sep 17 00:00:00 2001 From: Abyss777 Date: Thu, 2 Jun 2016 11:54:13 +0500 Subject: Send position with event to websocket --- src/org/traccar/api/AsyncSocket.java | 30 ++++++++++++++++++++++-------- 1 file changed, 22 insertions(+), 8 deletions(-) (limited to 'src/org/traccar/api') 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> data = new HashMap>(); + 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> data = new HashMap>(); + data.put(KEY_DEVICES, Collections.singletonList(device)); + sendData(data); } @Override public void onUpdatePosition(Position position) { - sendData(KEY_POSITIONS, Collections.singletonList(position)); + Map> data = new HashMap>(); + 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> data = new HashMap>(); + 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> data) { if (!data.isEmpty() && isConnected()) { JsonObjectBuilder json = Json.createObjectBuilder(); - json.add(key, JsonConverter.arrayToJson(data)); + for (Map.Entry> entry : data.entrySet()) { + json.add(entry.getKey(), JsonConverter.arrayToJson(entry.getValue())); + } getRemote().sendString(json.build().toString(), null); } } - } -- cgit v1.2.3