diff options
author | Anton Tananaev <anton.tananaev@gmail.com> | 2015-06-29 10:48:34 +1200 |
---|---|---|
committer | Anton Tananaev <anton.tananaev@gmail.com> | 2015-06-29 10:48:34 +1200 |
commit | d1c4cd526845aad56c5b0a3e20454638bbc7fecc (patch) | |
tree | 565ee245ea0e98b88674b775147fbc6d3e1933cb /src/org/traccar/http/CommandsServlet.java | |
parent | 88b3f00f3855aa408c7859051efdcb5b37fe559f (diff) | |
download | trackermap-server-d1c4cd526845aad56c5b0a3e20454638bbc7fecc.tar.gz trackermap-server-d1c4cd526845aad56c5b0a3e20454638bbc7fecc.tar.bz2 trackermap-server-d1c4cd526845aad56c5b0a3e20454638bbc7fecc.zip |
Merge commands implmentation (fix #1271)
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())); + } +} |