diff options
Diffstat (limited to 'src/org/traccar/http/CommandsServlet.java')
-rw-r--r-- | src/org/traccar/http/CommandsServlet.java | 58 |
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())); + } +} |