aboutsummaryrefslogtreecommitdiff
path: root/src/org/traccar/http/CommandsServlet.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/org/traccar/http/CommandsServlet.java')
-rw-r--r--src/org/traccar/http/CommandsServlet.java58
1 files changed, 58 insertions, 0 deletions
diff --git a/src/org/traccar/http/CommandsServlet.java b/src/org/traccar/http/CommandsServlet.java
new file mode 100644
index 000000000..3e3ab9086
--- /dev/null
+++ b/src/org/traccar/http/CommandsServlet.java
@@ -0,0 +1,58 @@
+package org.traccar.http;
+
+import org.traccar.Context;
+import org.traccar.database.ActiveDevice;
+import org.traccar.http.commands.CommandType;
+import org.traccar.http.commands.GpsCommand;
+
+import javax.json.Json;
+import javax.json.JsonObject;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+public class CommandsServlet extends BaseServlet {
+
+ @Override
+ protected boolean handle(String command, HttpServletRequest req, HttpServletResponse resp) throws Exception {
+ if (command.equals("/send")) {
+ send(req, resp);
+ }
+ else if (command.equals("/raw")) {
+ sendRawCommand(req, resp);
+ }
+ else {
+ return false;
+ }
+ return true;
+ }
+
+ private void send(HttpServletRequest req, HttpServletResponse resp) throws Exception {
+ GpsCommand command = JsonConverter.<GpsCommand>enumObjectFromJson(req.getReader(), new EnumFactory(CommandType.class, "type"));
+
+ String uniqueId = command.getUniqueId();
+
+ ActiveDevice activeDevice = Context.getDataManager().getActiveDevice(uniqueId);
+ if(activeDevice == null) {
+ throw new RuntimeException("The device has not yet registered to the server");
+ }
+
+ activeDevice.sendCommand(command);
+
+ sendResponse(resp.getWriter(), JsonConverter.objectToJson(new Object()));
+ }
+
+ private void sendRawCommand(HttpServletRequest req, HttpServletResponse resp) throws Exception {
+ JsonObject json = Json.createReader(req.getReader()).readObject();
+ String uniqueId = json.getString("uniqueId");
+
+ ActiveDevice activeDevice = Context.getDataManager().getActiveDevice(uniqueId);
+ if(activeDevice == null) {
+ throw new RuntimeException("The device has not yet registered to the server");
+ }
+
+ String command = json.getString("command");
+ activeDevice.write(command);
+
+ sendResponse(resp.getWriter(), JsonConverter.objectToJson(new Object()));
+ }
+}