aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/org/traccar/BaseProtocol.java2
-rw-r--r--src/org/traccar/BaseProtocolEncoder.java4
-rw-r--r--src/org/traccar/protocol/Gps103Protocol.java25
-rw-r--r--src/org/traccar/protocol/Gps103ProtocolEncoder.java65
4 files changed, 79 insertions, 17 deletions
diff --git a/src/org/traccar/BaseProtocol.java b/src/org/traccar/BaseProtocol.java
index 4a408761d..31f278739 100644
--- a/src/org/traccar/BaseProtocol.java
+++ b/src/org/traccar/BaseProtocol.java
@@ -35,7 +35,7 @@ public abstract class BaseProtocol implements Protocol {
return name;
}
- public void setSupportedCommands(String[] commands) {
+ public void setSupportedCommands(String... commands) {
supportedCommands.addAll(Arrays.asList(commands));
}
diff --git a/src/org/traccar/BaseProtocolEncoder.java b/src/org/traccar/BaseProtocolEncoder.java
index 819ccc998..2589e4994 100644
--- a/src/org/traccar/BaseProtocolEncoder.java
+++ b/src/org/traccar/BaseProtocolEncoder.java
@@ -21,6 +21,10 @@ import org.jboss.netty.handler.codec.oneone.OneToOneEncoder;
import org.traccar.model.Command;
public abstract class BaseProtocolEncoder extends OneToOneEncoder {
+
+ protected String getUniqueId(long deviceId) {
+ return Context.getIdentityManager().getDeviceById(deviceId).getUniqueId();
+ }
@Override
protected Object encode(ChannelHandlerContext ctx, Channel channel, Object msg) throws Exception {
diff --git a/src/org/traccar/protocol/Gps103Protocol.java b/src/org/traccar/protocol/Gps103Protocol.java
index 3f04ede4e..59d8e62a7 100644
--- a/src/org/traccar/protocol/Gps103Protocol.java
+++ b/src/org/traccar/protocol/Gps103Protocol.java
@@ -15,6 +15,7 @@
*/
package org.traccar.protocol;
+import java.util.List;
import org.jboss.netty.bootstrap.ConnectionlessBootstrap;
import org.jboss.netty.bootstrap.ServerBootstrap;
import org.jboss.netty.channel.ChannelPipeline;
@@ -23,29 +24,19 @@ import org.jboss.netty.handler.codec.string.StringEncoder;
import org.traccar.BaseProtocol;
import org.traccar.CharacterDelimiterFrameDecoder;
import org.traccar.TrackerServer;
-
-import java.util.List;
+import org.traccar.model.Command;
public class Gps103Protocol extends BaseProtocol {
public Gps103Protocol() {
super("gps103");
+ setSupportedCommands(
+ Command.TYPE_POSITION_STOP,
+ Command.TYPE_POSITION_FIX,
+ Command.TYPE_ENGINE_STOP,
+ Command.TYPE_ENGINE_RESUME);
}
- /*@Override
- protected void initCommandsTemplates(Map<CommandType, CommandTemplate> templates) {
- templates.put(CommandType.STOP_POSITIONING, new StringCommandTemplate("**,imei:[%s],A", Command.UNIQUE_ID));
- templates.put(CommandType.FIX_POSITIONING, new StringCommandTemplate("**,imei:[%s],C,[%s]", Command.UNIQUE_ID, FixPositioningCommand.FREQUENCY)
- .addConverter(Duration.class, new CommandValueConversion<Duration>() {
- @Override
- public String convert(Duration value) {
- return String.format("%02d%s", value.getValue(), value.getUnit().getCommandFormat());
- }
- }));
- templates.put(CommandType.RESUME_ENGINE, new StringCommandTemplate("**,imei:[%s],J", Command.UNIQUE_ID));
- templates.put(CommandType.STOP_ENGINE, new StringCommandTemplate("**,imei:[%s],K", Command.UNIQUE_ID));
- }*/
-
@Override
public void initTrackerServers(List<TrackerServer> serverList) {
serverList.add(new TrackerServer(new ServerBootstrap(), this.getName()) {
@@ -55,6 +46,7 @@ public class Gps103Protocol extends BaseProtocol {
pipeline.addLast("stringDecoder", new StringDecoder());
pipeline.addLast("stringEncoder", new StringEncoder());
pipeline.addLast("objectDecoder", new Gps103ProtocolDecoder(Gps103Protocol.this));
+ pipeline.addLast("objectEncoder", new Gps103ProtocolEncoder());
}
});
serverList.add(new TrackerServer(new ConnectionlessBootstrap(), this.getName()) {
@@ -63,6 +55,7 @@ public class Gps103Protocol extends BaseProtocol {
pipeline.addLast("stringDecoder", new StringDecoder());
pipeline.addLast("stringEncoder", new StringEncoder());
pipeline.addLast("objectDecoder", new Gps103ProtocolDecoder(Gps103Protocol.this));
+ pipeline.addLast("objectEncoder", new Gps103ProtocolEncoder());
}
});
}
diff --git a/src/org/traccar/protocol/Gps103ProtocolEncoder.java b/src/org/traccar/protocol/Gps103ProtocolEncoder.java
new file mode 100644
index 000000000..d7cddd1ba
--- /dev/null
+++ b/src/org/traccar/protocol/Gps103ProtocolEncoder.java
@@ -0,0 +1,65 @@
+/*
+ * 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 java.util.Map;
+import org.traccar.BaseProtocolEncoder;
+import org.traccar.model.Command;
+
+public class Gps103ProtocolEncoder extends BaseProtocolEncoder {
+
+ /*@Override
+ protected void initCommandsTemplates(Map<CommandType, CommandTemplate> templates) {
+ templates.put(CommandType.FIX_POSITIONING, new StringCommandTemplate("**,imei:[%s],C,[%s]", Command.UNIQUE_ID, FixPositioningCommand.FREQUENCY)
+ .addConverter(Duration.class, new CommandValueConversion<Duration>() {
+ @Override
+ public String convert(Duration value) {
+ return String.format("%02d%s", value.getValue(), value.getUnit().getCommandFormat());
+ }
+ }));
+ }*/
+
+ private String formatCommand(String format, Command command) {
+
+ String result = format;
+
+ result = result.replaceAll("\\{uniqueId}", getUniqueId(command.getDeviceId()));
+ for (Map.Entry<String, Object> entry : command.getOther().entrySet()) {
+ result = result.replaceAll("\\{" + entry.getKey() + "}", entry.getValue().toString());
+ }
+
+ return result;
+ }
+
+
+ @Override
+ protected Object encodeCommand(Command command) {
+
+ switch (command.getType()) {
+ case Command.TYPE_POSITION_STOP:
+ return formatCommand("**,imei:{uniqueId},A", command);
+ case Command.TYPE_POSITION_FIX:
+ return formatCommand("**,imei:{uniqueId},C,{time}", command); // TODO
+ case Command.TYPE_ENGINE_STOP:
+ return formatCommand("**,imei:{uniqueId},K", command);
+ case Command.TYPE_ENGINE_RESUME:
+ return formatCommand("**,imei:{uniqueId},J", command);
+ }
+
+ return null;
+ }
+
+}