From d2b861df3f3faa46c8dcf72e5897ed31cfe40b40 Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Fri, 17 Jul 2015 19:48:40 +1200 Subject: Add base protocol encoder --- src/org/traccar/BaseProtocol.java | 19 +++++++--------- src/org/traccar/BaseProtocolDecoder.java | 3 --- src/org/traccar/BaseProtocolEncoder.java | 37 ++++++++++++++++++++++++++++++++ src/org/traccar/Protocol.java | 6 +++--- 4 files changed, 48 insertions(+), 17 deletions(-) create mode 100644 src/org/traccar/BaseProtocolEncoder.java diff --git a/src/org/traccar/BaseProtocol.java b/src/org/traccar/BaseProtocol.java index 932c0d9cc..4a408761d 100644 --- a/src/org/traccar/BaseProtocol.java +++ b/src/org/traccar/BaseProtocol.java @@ -15,10 +15,11 @@ */ package org.traccar; -import org.traccar.model.Command; +import java.util.Arrays; +import java.util.HashSet; +import java.util.Set; import org.traccar.database.ActiveDevice; - -import java.util.*; +import org.traccar.model.Command; public abstract class BaseProtocol implements Protocol { @@ -29,6 +30,7 @@ public abstract class BaseProtocol implements Protocol { this.name = name; } + @Override public String getName() { return name; } @@ -39,15 +41,10 @@ public abstract class BaseProtocol implements Protocol { @Override public void sendCommand(ActiveDevice activeDevice, Command command) { - /*CommandTemplate commandMessage = commandTemplates.get(command.getType()); - - if (commandMessage == null) { - throw new RuntimeException("The command " + command + " is not yet supported in protocol " + this.getName()); + if (!supportedCommands.contains(command.getType())) { + throw new RuntimeException("Command " + command + " is not supported in protocol " + this.getName()); } - - Object response = commandMessage.applyTo(activeDevice, command); - - activeDevice.write(response);*/ + activeDevice.write(command); } } diff --git a/src/org/traccar/BaseProtocolDecoder.java b/src/org/traccar/BaseProtocolDecoder.java index 285525e78..3509ec4cf 100644 --- a/src/org/traccar/BaseProtocolDecoder.java +++ b/src/org/traccar/BaseProtocolDecoder.java @@ -20,9 +20,6 @@ import org.jboss.netty.channel.Channel; import org.traccar.helper.Log; import org.traccar.model.Device; -/** - * Base class for protocol decoders - */ public abstract class BaseProtocolDecoder extends ExtendedObjectDecoder { private final Protocol protocol; diff --git a/src/org/traccar/BaseProtocolEncoder.java b/src/org/traccar/BaseProtocolEncoder.java new file mode 100644 index 000000000..819ccc998 --- /dev/null +++ b/src/org/traccar/BaseProtocolEncoder.java @@ -0,0 +1,37 @@ +/* + * 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; + +import org.jboss.netty.channel.Channel; +import org.jboss.netty.channel.ChannelHandlerContext; +import org.jboss.netty.handler.codec.oneone.OneToOneEncoder; +import org.traccar.model.Command; + +public abstract class BaseProtocolEncoder extends OneToOneEncoder { + + @Override + protected Object encode(ChannelHandlerContext ctx, Channel channel, Object msg) throws Exception { + + if (msg instanceof Command) { + return encodeCommand((Command) msg); + } + + return msg; + } + + protected abstract Object encodeCommand(Command command); + +} diff --git a/src/org/traccar/Protocol.java b/src/org/traccar/Protocol.java index ecda76142..cd37853d0 100644 --- a/src/org/traccar/Protocol.java +++ b/src/org/traccar/Protocol.java @@ -1,9 +1,8 @@ package org.traccar; -import org.traccar.model.Command; -import org.traccar.database.ActiveDevice; - import java.util.List; +import org.traccar.database.ActiveDevice; +import org.traccar.model.Command; public interface Protocol { @@ -12,4 +11,5 @@ public interface Protocol { void sendCommand(ActiveDevice activeDevice, Command command); void initTrackerServers(List serverList); + } -- cgit v1.2.3