diff options
author | Anton Tananaev <anton.tananaev@gmail.com> | 2020-03-15 16:02:37 -0700 |
---|---|---|
committer | Anton Tananaev <anton.tananaev@gmail.com> | 2020-03-15 16:02:37 -0700 |
commit | 606afeb37451f921fe3aecffab439cc2bcc7a175 (patch) | |
tree | cd4337cd546758cf70e66b89d09ef9a5189d5fcc | |
parent | 11dcacc2fdfd29f4440c8c46e501ef565f9b1dfd (diff) | |
download | traccar-server-606afeb37451f921fe3aecffab439cc2bcc7a175.tar.gz traccar-server-606afeb37451f921fe3aecffab439cc2bcc7a175.tar.bz2 traccar-server-606afeb37451f921fe3aecffab439cc2bcc7a175.zip |
Queue HTTP commands
-rw-r--r-- | src/main/java/org/traccar/database/ActiveDevice.java | 6 | ||||
-rw-r--r-- | src/main/java/org/traccar/database/CommandsManager.java | 7 |
2 files changed, 12 insertions, 1 deletions
diff --git a/src/main/java/org/traccar/database/ActiveDevice.java b/src/main/java/org/traccar/database/ActiveDevice.java index 34b3de227..e3ece6ad9 100644 --- a/src/main/java/org/traccar/database/ActiveDevice.java +++ b/src/main/java/org/traccar/database/ActiveDevice.java @@ -16,6 +16,8 @@ package org.traccar.database; import io.netty.channel.Channel; +import io.netty.handler.codec.http.HttpRequestDecoder; +import org.traccar.BasePipelineFactory; import org.traccar.Protocol; import org.traccar.model.Command; @@ -43,6 +45,10 @@ public class ActiveDevice { return deviceId; } + public boolean supportsLiveCommands() { + return BasePipelineFactory.getHandler(channel.pipeline(), HttpRequestDecoder.class) == null; + } + public void sendCommand(Command command) { protocol.sendDataCommand(channel, remoteAddress, command); } diff --git a/src/main/java/org/traccar/database/CommandsManager.java b/src/main/java/org/traccar/database/CommandsManager.java index 99114db5e..485402807 100644 --- a/src/main/java/org/traccar/database/CommandsManager.java +++ b/src/main/java/org/traccar/database/CommandsManager.java @@ -76,7 +76,12 @@ public class CommandsManager extends ExtendedObjectManager<Command> { } else { ActiveDevice activeDevice = Context.getConnectionManager().getActiveDevice(deviceId); if (activeDevice != null) { - activeDevice.sendCommand(command); + if (activeDevice.supportsLiveCommands()) { + activeDevice.sendCommand(command); + } else { + getDeviceQueue(deviceId).add(command); + return false; + } } else if (!queueing) { throw new RuntimeException("Device is not online"); } else { |