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 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) (limited to 'src/org/traccar/BaseProtocol.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); } } -- cgit v1.2.3