aboutsummaryrefslogtreecommitdiff
path: root/src/org/traccar/notification/EventForwarder.java
diff options
context:
space:
mode:
authorAnton Tananaev <anton.tananaev@gmail.com>2016-07-14 08:56:45 +1200
committerGitHub <noreply@github.com>2016-07-14 08:56:45 +1200
commit82fd4d09aa7ac37bf2eb1857b12efbd3bc773a94 (patch)
tree59e55fd0c4f9bffa4c140982c7f040bb8636ad9b /src/org/traccar/notification/EventForwarder.java
parentd154cb277fe2f7b5dfe6bdaee1a013729bbf22eb (diff)
parent7ce8c4ecf82828920926f81f55cbc4fb833ef259 (diff)
downloadtrackermap-server-82fd4d09aa7ac37bf2eb1857b12efbd3bc773a94.tar.gz
trackermap-server-82fd4d09aa7ac37bf2eb1857b12efbd3bc773a94.tar.bz2
trackermap-server-82fd4d09aa7ac37bf2eb1857b12efbd3bc773a94.zip
Merge pull request #2110 from Abyss777/master
Added possibility to forward all events
Diffstat (limited to 'src/org/traccar/notification/EventForwarder.java')
-rw-r--r--src/org/traccar/notification/EventForwarder.java75
1 files changed, 75 insertions, 0 deletions
diff --git a/src/org/traccar/notification/EventForwarder.java b/src/org/traccar/notification/EventForwarder.java
new file mode 100644
index 000000000..096026541
--- /dev/null
+++ b/src/org/traccar/notification/EventForwarder.java
@@ -0,0 +1,75 @@
+package org.traccar.notification;
+
+import java.nio.charset.StandardCharsets;
+
+import javax.json.Json;
+import javax.json.JsonObjectBuilder;
+
+import org.traccar.Context;
+import org.traccar.model.Device;
+import org.traccar.model.Event;
+import org.traccar.model.Geofence;
+import org.traccar.model.Position;
+import org.traccar.web.JsonConverter;
+
+import com.ning.http.client.AsyncHttpClient.BoundRequestBuilder;
+
+public final class EventForwarder {
+
+ private String url;
+ private String header;
+
+ public EventForwarder() {
+ url = Context.getConfig().getString("event.forward.url", "http://localhost/");
+ header = Context.getConfig().getString("event.forward.header", "");
+ }
+
+ private static final String USER_AGENT = "Traccar Server";
+
+ private static final String KEY_POSITION = "position";
+ private static final String KEY_EVENT = "event";
+ private static final String KEY_GEOFENCE = "geofence";
+ private static final String KEY_DEVICE = "device";
+
+ public void forwardEvent(Event event, Position position) {
+
+
+ BoundRequestBuilder requestBuilder = Context.getAsyncHttpClient().preparePost(url);
+
+ requestBuilder.addHeader("Content-Type", "application/json; charset=utf-8");
+ requestBuilder.addHeader("User-Agent", USER_AGENT);
+ if (!header.equals("")) {
+ String[] headerLines = header.split("\\r?\\n");
+ for (String headerLine: headerLines) {
+ String[] splitedLine = headerLine.split(":", 2);
+ if (splitedLine.length == 2) {
+ requestBuilder.addHeader(splitedLine[0].trim(), splitedLine[1].trim());
+ }
+ }
+ }
+
+ requestBuilder.setBody(preparePayload(event, position));
+ requestBuilder.execute();
+ }
+
+ private byte[] preparePayload(Event event, Position position) {
+ JsonObjectBuilder json = Json.createObjectBuilder();
+ json.add(KEY_EVENT, JsonConverter.objectToJson(event));
+ if (position != null) {
+ json.add(KEY_POSITION, JsonConverter.objectToJson(position));
+ }
+ if (event.getDeviceId() != 0) {
+ Device device = Context.getIdentityManager().getDeviceById(event.getDeviceId());
+ if (device != null) {
+ json.add(KEY_DEVICE, JsonConverter.objectToJson(device));
+ }
+ }
+ if (event.getGeofenceId() != 0) {
+ Geofence geofence = Context.getGeofenceManager().getGeofence(event.getGeofenceId());
+ if (geofence != null) {
+ json.add(KEY_GEOFENCE, JsonConverter.objectToJson(geofence));
+ }
+ }
+ return json.build().toString().getBytes(StandardCharsets.UTF_8);
+ }
+}