diff options
author | Anton Tananaev <anton.tananaev@gmail.com> | 2016-05-07 16:44:27 +1200 |
---|---|---|
committer | Anton Tananaev <anton.tananaev@gmail.com> | 2016-05-07 16:44:27 +1200 |
commit | de56187c1a48b3c4388ff986bd318d4683f2a344 (patch) | |
tree | 9aada33125a5a9b5d9ab935ead33e48ee88b2c35 /src/org | |
parent | ff23b231b678536e2d395680c5f9fb0f73e2ddd8 (diff) | |
download | traccar-server-de56187c1a48b3c4388ff986bd318d4683f2a344.tar.gz traccar-server-de56187c1a48b3c4388ff986bd318d4683f2a344.tar.bz2 traccar-server-de56187c1a48b3c4388ff986bd318d4683f2a344.zip |
Implement general custom commands
Diffstat (limited to 'src/org')
-rw-r--r-- | src/org/traccar/BaseProtocol.java | 18 | ||||
-rw-r--r-- | src/org/traccar/protocol/Gps103ProtocolDecoder.java | 2 | ||||
-rw-r--r-- | src/org/traccar/protocol/MiniFinderProtocol.java | 2 | ||||
-rw-r--r-- | src/org/traccar/protocol/MiniFinderProtocolEncoder.java | 38 |
4 files changed, 16 insertions, 44 deletions
diff --git a/src/org/traccar/BaseProtocol.java b/src/org/traccar/BaseProtocol.java index 7714f18db..826a290d0 100644 --- a/src/org/traccar/BaseProtocol.java +++ b/src/org/traccar/BaseProtocol.java @@ -15,9 +15,12 @@ */ package org.traccar; +import org.jboss.netty.buffer.ChannelBuffers; +import org.jboss.netty.handler.codec.string.StringEncoder; import org.traccar.database.ActiveDevice; import org.traccar.model.Command; +import javax.xml.bind.DatatypeConverter; import java.util.Arrays; import java.util.HashSet; import java.util.Set; @@ -42,10 +45,19 @@ public abstract class BaseProtocol implements Protocol { @Override public void sendCommand(ActiveDevice activeDevice, Command command) { - if (!supportedCommands.contains(command.getType())) { - throw new RuntimeException("Command " + command.getType() + " is not supported in protocol " + getName()); + if (command.getType().equals(Command.TYPE_CUSTOM)) { + String data = (String) command.getAttributes().get(Command.KEY_DATA); + if (activeDevice.getChannel().getPipeline().get(StringEncoder.class) != null) { + activeDevice.write(data); + } else { + activeDevice.write(ChannelBuffers.wrappedBuffer(DatatypeConverter.parseHexBinary(data))); + } + } else { + if (!supportedCommands.contains(command.getType())) { + throw new RuntimeException("Command " + command.getType() + " is not supported in protocol " + getName()); + } + activeDevice.write(command); } - activeDevice.write(command); } } diff --git a/src/org/traccar/protocol/Gps103ProtocolDecoder.java b/src/org/traccar/protocol/Gps103ProtocolDecoder.java index f2d2ba5ba..c1f0af42f 100644 --- a/src/org/traccar/protocol/Gps103ProtocolDecoder.java +++ b/src/org/traccar/protocol/Gps103ProtocolDecoder.java @@ -121,7 +121,7 @@ public class Gps103ProtocolDecoder extends BaseProtocolDecoder { } // Send response #2 - if (Character.isDigit(sentence.charAt(0))) { + if (!sentence.isEmpty() && Character.isDigit(sentence.charAt(0))) { if (channel != null) { channel.write("ON", remoteAddress); } diff --git a/src/org/traccar/protocol/MiniFinderProtocol.java b/src/org/traccar/protocol/MiniFinderProtocol.java index 9208af0e2..e9f6d4cde 100644 --- a/src/org/traccar/protocol/MiniFinderProtocol.java +++ b/src/org/traccar/protocol/MiniFinderProtocol.java @@ -30,7 +30,6 @@ public class MiniFinderProtocol extends BaseProtocol { public MiniFinderProtocol() { super("minifinder"); - setSupportedCommands(Command.TYPE_CUSTOM); } @Override @@ -41,7 +40,6 @@ public class MiniFinderProtocol extends BaseProtocol { pipeline.addLast("frameDecoder", new CharacterDelimiterFrameDecoder(1024, ';')); pipeline.addLast("stringEncoder", new StringEncoder()); pipeline.addLast("stringDecoder", new StringDecoder()); - pipeline.addLast("objectEncoder", new MiniFinderProtocolEncoder()); pipeline.addLast("objectDecoder", new MiniFinderProtocolDecoder(MiniFinderProtocol.this)); } }); diff --git a/src/org/traccar/protocol/MiniFinderProtocolEncoder.java b/src/org/traccar/protocol/MiniFinderProtocolEncoder.java deleted file mode 100644 index e5762f5dd..000000000 --- a/src/org/traccar/protocol/MiniFinderProtocolEncoder.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.traccar.protocol; - -import org.traccar.StringProtocolEncoder; -import org.traccar.helper.Log; -import org.traccar.model.Command; - -public class MiniFinderProtocolEncoder extends StringProtocolEncoder { - - @Override - protected Object encodeCommand(Command command) { - - switch (command.getType()) { - case Command.TYPE_CUSTOM: - return command.getAttributes().get("raw"); - default: - Log.warning(new UnsupportedOperationException(command.getType())); - break; - } - - return null; - } - -} |