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 +++++++++++++--------- .../protocol/FleetGuideProtocolDecoderTest.java | 3 ++ 2 files changed, 23 insertions(+), 14 deletions(-) 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; } diff --git a/src/test/java/org/traccar/protocol/FleetGuideProtocolDecoderTest.java b/src/test/java/org/traccar/protocol/FleetGuideProtocolDecoderTest.java index 363f33c5b..8146f6a3e 100644 --- a/src/test/java/org/traccar/protocol/FleetGuideProtocolDecoderTest.java +++ b/src/test/java/org/traccar/protocol/FleetGuideProtocolDecoderTest.java @@ -13,6 +13,9 @@ public class FleetGuideProtocolDecoderTest extends ProtocolTest { verifyNull(decoder, binary( "5300188f8a020001f36a")); + verifyNull(decoder, binary( + "5322188f8a0200140700f355831a83ec06030c008065052c06ffffffff033006808001180003200100005ec0")); + verifyPositions(decoder, binary( "539e598f8a020003020700e378351ac39f040c04ffa92e806a28a13b1f00b638030c000067052c06ffffffff033006808001180003200100000700e478351ac40204303dab2e80cb27a13b1c00ac40021b30e778351ac502043082a72e8054020530bf30021b30e978351ac69f0d0c0433a72e80c123a13b2000df3807002579351ac79f06020a170000df28021b476179351ac8020f30021c81279d79351ac9020f30021c8207d979351aca020f30021c8157157a351acb022b8140517a351acc022b608d7a351acd022b60c97a351ace022b30057b351acf022b30417b351ad0022b307d7b351ad1020f3048021b30b97b351ad2020f3070030c004066021630f57b351ad30213841080021730317c351ad4021330c00217306d7c351ad5020f3050021b30a97c351ad602138170021830e57c351ad7020f3058021b30217d351ad8021385500218305d7d351ad9022b8110997d351ada022b8170d57d351adb022b30117e351adc020f3068030ce184680216304d7e351add020f3060030ce34469021630897e351ade021260e4021830c57e351adf021230e5021830017f351ae002293022f2")); -- cgit v1.2.3