From 3f55f474fde34c8110b48cb1ac472671ca5f80fc Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Thu, 8 Feb 2024 06:59:14 -0800 Subject: Handle last FleetGuide position --- .../protocol/FleetGuideProtocolDecoder.java | 34 +++++++++++++--------- 1 file changed, 20 insertions(+), 14 deletions(-) (limited to 'src/main/java') diff --git a/src/main/java/org/traccar/protocol/FleetGuideProtocolDecoder.java b/src/main/java/org/traccar/protocol/FleetGuideProtocolDecoder.java index ba4d9cfae..b4593d843 100644 --- a/src/main/java/org/traccar/protocol/FleetGuideProtocolDecoder.java +++ b/src/main/java/org/traccar/protocol/FleetGuideProtocolDecoder.java @@ -82,13 +82,15 @@ public class FleetGuideProtocolDecoder extends BaseProtocolDecoder { index = null; } - Integer responseType; - if (type == MSG_SYNC_REQ) { - responseType = MSG_SYNC_ACK; - } else { - responseType = null; + if (type != MSG_DATA_N_ACK && type != MSG_REP_N_ACK) { + Integer responseType; + if (type == MSG_SYNC_REQ) { + responseType = MSG_SYNC_ACK; + } else { + responseType = null; + } + sendResponse(channel, remoteAddress, deviceId, responseType, index); } - sendResponse(channel, remoteAddress, deviceId, responseType, index); if (BitUtil.check(options, 13)) { buf.readUnsignedShortLE(); // acknowledgement @@ -116,7 +118,7 @@ public class FleetGuideProtocolDecoder extends BaseProtocolDecoder { int recordEndIndex = data.readerIndex() + recordLength; if (recordTypes.contains(recordType)) { - positions.add(processPosition(position)); + processPosition(positions, position); position = new Position(getProtocolName()); position.setDeviceId(deviceSession.getDeviceId()); recordTypes.clear(); @@ -159,19 +161,23 @@ public class FleetGuideProtocolDecoder extends BaseProtocolDecoder { } + processPosition(positions, position); + data.release(); return positions.isEmpty() ? null : positions; } - private Position processPosition(Position position) { - if (position.getFixTime() == null) { - position.setTime(new Date()); - } - if (!position.getAttributes().containsKey(Position.KEY_SATELLITES)) { - getLastLocation(position, null); + private void processPosition(List positions, Position position) { + if (!position.getAttributes().isEmpty()) { + if (position.getFixTime() == null) { + position.setTime(new Date()); + } + if (!position.getAttributes().containsKey(Position.KEY_SATELLITES)) { + getLastLocation(position, null); + } + positions.add(position); } - return position; } -- cgit v1.2.3