From de56187c1a48b3c4388ff986bd318d4683f2a344 Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Sat, 7 May 2016 16:44:27 +1200 Subject: Implement general custom commands --- src/org/traccar/BaseProtocol.java | 18 ++++++++-- .../traccar/protocol/Gps103ProtocolDecoder.java | 2 +- src/org/traccar/protocol/MiniFinderProtocol.java | 2 -- .../protocol/MiniFinderProtocolEncoder.java | 38 ---------------------- .../protocol/MiniFinderProtocolEncoderTest.java | 36 -------------------- 5 files changed, 16 insertions(+), 80 deletions(-) delete mode 100644 src/org/traccar/protocol/MiniFinderProtocolEncoder.java delete mode 100644 test/org/traccar/protocol/MiniFinderProtocolEncoderTest.java 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; - } - -} diff --git a/test/org/traccar/protocol/MiniFinderProtocolEncoderTest.java b/test/org/traccar/protocol/MiniFinderProtocolEncoderTest.java deleted file mode 100644 index 524152bb8..000000000 --- a/test/org/traccar/protocol/MiniFinderProtocolEncoderTest.java +++ /dev/null @@ -1,36 +0,0 @@ -package org.traccar.protocol; - -import org.junit.Before; -import org.junit.Test; -import org.traccar.ProtocolTest; -import org.traccar.model.Command; - -public class MiniFinderProtocolEncoderTest extends ProtocolTest { - - private String prefix = "123456"; - private MiniFinderProtocolEncoder encoder; - - @Before - public void setup() { - encoder = new MiniFinderProtocolEncoder(); - } - - @Test - public void testEncodeCustom() throws Exception { - String expected = String.format("%sM,700", prefix); - Command command = new Command(); - command.setType(Command.TYPE_CUSTOM); - command.set("raw", expected); - Object encoded = encoder.encodeCommand(command); - assert expected.equals(encoded); - } - - @Test - public void testEncodeUnsupportedCommand() throws Exception { - Command command = new Command(); - command.setType("UNSUPPORTED"); - Object o = encoder.encodeCommand(command); - assert o == null; - } - -} -- cgit v1.2.3