From e98b18b8b0a8c99d24ac8010c1393978d071baa2 Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Tue, 14 Jul 2015 19:17:02 +1200 Subject: Support forwarding of data (fix #1131) --- src/org/traccar/WebDataHandler.java | 41 ++++++++++++++++++++++++++++++++++--- 1 file changed, 38 insertions(+), 3 deletions(-) (limited to 'src/org/traccar/WebDataHandler.java') diff --git a/src/org/traccar/WebDataHandler.java b/src/org/traccar/WebDataHandler.java index bb1a540a9..fce73c816 100644 --- a/src/org/traccar/WebDataHandler.java +++ b/src/org/traccar/WebDataHandler.java @@ -16,6 +16,12 @@ package org.traccar; import com.ning.http.client.AsyncHttpClient; +import java.util.Calendar; +import java.util.Formatter; +import java.util.Locale; +import java.util.TimeZone; +import org.traccar.helper.Crc; +import org.traccar.model.Device; import org.traccar.model.Position; public class WebDataHandler extends BaseDataHandler { @@ -25,15 +31,44 @@ public class WebDataHandler extends BaseDataHandler { public WebDataHandler(String url) { this.url = url; } + + private static String formatSentence(Position position) { + + StringBuilder s = new StringBuilder("$GPRMC,"); + + try (Formatter f = new Formatter(s, Locale.ENGLISH)) { + + Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("UTC"), Locale.ENGLISH); + calendar.setTimeInMillis(position.getFixTime().getTime()); + + f.format("%1$tH%1$tM%1$tS.%1$tL,A,", calendar); + + double lat = position.getLatitude(); + double lon = position.getLongitude(); + f.format("%02d%07.4f,%c,", (int) Math.abs(lat), Math.abs(lat) % 1 * 60, lat < 0 ? 'S' : 'N'); + f.format("%03d%07.4f,%c,", (int) Math.abs(lon), Math.abs(lon) % 1 * 60, lon < 0 ? 'W' : 'E'); + + f.format("%.2f,%.2f,", position.getSpeed(), position.getCourse()); + f.format("%1$td%1$tm%1$ty,,", calendar); + } + + s.append(Crc.nmeaChecksum(s.toString())); + + return s.toString(); + } @Override protected Position handlePosition(Position position) { + + Device device = Context.getIdentityManager().getDeviceById(position.getDeviceId()); + String request = url. - //replaceAll("\\{uniqueId}", String.valueOf(position.getDeviceId())). - replaceAll("\\{deviceId}", String.valueOf(position.getDeviceId())). + replaceAll("\\{uniqueId}", device.getUniqueId()). + replaceAll("\\{deviceId}", String.valueOf(device.getId())). replaceAll("\\{fixTime}", String.valueOf(position.getFixTime().getTime())). replaceAll("\\{latitude}", String.valueOf(position.getLatitude())). - replaceAll("\\{longitude}", String.valueOf(position.getLongitude())); + replaceAll("\\{longitude}", String.valueOf(position.getLongitude())). + replaceAll("\\{gprmc}", formatSentence(position)); AsyncHttpClient asyncHttpClient = new AsyncHttpClient(); asyncHttpClient.prepareGet(request).execute(); -- cgit v1.2.3