diff options
-rw-r--r-- | .gitignore | 11 | ||||
-rw-r--r-- | pom.xml | 220 | ||||
-rw-r--r-- | setup/windows/windows.cfg | 12 | ||||
-rw-r--r-- | setup/windows/windowsPG.cfg | 150 | ||||
-rw-r--r-- | src/org/traccar/GenericPipelineFactory.java | 2 | ||||
-rw-r--r-- | src/org/traccar/Server.java | 916 | ||||
-rw-r--r-- | src/org/traccar/TrackerEventHandler.java | 4 | ||||
-rw-r--r-- | src/org/traccar/TrackerServer.java | 125 | ||||
-rw-r--r-- | src/org/traccar/http/WebServer.java | 13 | ||||
-rw-r--r-- | src/org/traccar/model/DatabaseDataManager.java | 2 | ||||
-rw-r--r-- | src/org/traccar/model/Position.java | 19 | ||||
-rw-r--r-- | src/web/index.html | 60 | ||||
-rwxr-xr-x | test.sh | 3 | ||||
-rw-r--r-- | test/org/traccar/server/SocketCliente.java | 44 |
14 files changed, 599 insertions, 982 deletions
diff --git a/.gitignore b/.gitignore deleted file mode 100644 index b8abee9f2..000000000 --- a/.gitignore +++ /dev/null @@ -1,11 +0,0 @@ -# Compiled source # -################### -*.class - -# Eclipse Files # -################### -.classpath -.project -.settings/ -target/ - @@ -1,122 +1,114 @@ <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - <modelVersion>4.0.0</modelVersion> - <groupId>org.traccar</groupId> - <artifactId>traccar</artifactId> - <version>1.1-SNAPSHOT</version> + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + <groupId>org.traccar</groupId> + <artifactId>traccar</artifactId> + <version>1.1-SNAPSHOT</version> - <name>traccar</name> - <url>http://www.traccar.org</url> + <name>traccar</name> + <url>http://www.traccar.org</url> - <dependencies> - <dependency> - <groupId>com.h2database</groupId> - <artifactId>h2</artifactId> - <version>1.3.168</version> - </dependency> - <dependency> - <groupId>mysql</groupId> - <artifactId>mysql-connector-java</artifactId> - <version>5.1.21</version> - </dependency> - <dependency> - <groupId>postgresql</groupId> - <artifactId>postgresql</artifactId> - <version>8.1-407.jdbc3</version> - </dependency> - <dependency> - <groupId>io.netty</groupId> - <artifactId>netty</artifactId> - <version>3.5.2.Final</version> - </dependency> + <dependencies> + <dependency> + <groupId>com.h2database</groupId> + <artifactId>h2</artifactId> + <version>1.3.168</version> + </dependency> + <dependency> + <groupId>mysql</groupId> + <artifactId>mysql-connector-java</artifactId> + <version>5.1.21</version> + </dependency> + <dependency> + <groupId>io.netty</groupId> + <artifactId>netty</artifactId> + <version>3.5.2.Final</version> + </dependency> - <dependency> - <groupId>junit</groupId> - <artifactId>junit</artifactId> - <version>4.10</version> - </dependency> + <dependency> + <groupId>junit</groupId> + <artifactId>junit</artifactId> + <version>4.10</version> + </dependency> - <!-- Jetty --> - <dependency> - <groupId>org.eclipse.jetty.orbit</groupId> - <artifactId>javax.servlet</artifactId> - <version>3.0.0.v201112011016</version> - </dependency> - <dependency> - <groupId>org.eclipse.jetty</groupId> - <artifactId>jetty-continuation</artifactId> - <version>8.1.5.v20120716</version> - </dependency> - <dependency> - <groupId>org.eclipse.jetty</groupId> - <artifactId>jetty-http</artifactId> - <version>8.1.5.v20120716</version> - </dependency> - <dependency> - <groupId>org.eclipse.jetty</groupId> - <artifactId>jetty-io</artifactId> - <version>8.1.5.v20120716</version> - </dependency> - <dependency> - <groupId>org.eclipse.jetty</groupId> - <artifactId>jetty-util</artifactId> - <version>8.1.5.v20120716</version> - </dependency> - <dependency> - <groupId>org.eclipse.jetty</groupId> - <artifactId>jetty-server</artifactId> - <version>8.1.5.v20120716</version> - </dependency> - </dependencies> + <!-- Jetty --> + <dependency> + <groupId>org.eclipse.jetty.orbit</groupId> + <artifactId>javax.servlet</artifactId> + <version>3.0.0.v201112011016</version> + </dependency> + <dependency> + <groupId>org.eclipse.jetty</groupId> + <artifactId>jetty-continuation</artifactId> + <version>8.1.5.v20120716</version> + </dependency> + <dependency> + <groupId>org.eclipse.jetty</groupId> + <artifactId>jetty-http</artifactId> + <version>8.1.5.v20120716</version> + </dependency> + <dependency> + <groupId>org.eclipse.jetty</groupId> + <artifactId>jetty-io</artifactId> + <version>8.1.5.v20120716</version> + </dependency> + <dependency> + <groupId>org.eclipse.jetty</groupId> + <artifactId>jetty-util</artifactId> + <version>8.1.5.v20120716</version> + </dependency> + <dependency> + <groupId>org.eclipse.jetty</groupId> + <artifactId>jetty-server</artifactId> + <version>8.1.5.v20120716</version> + </dependency> + </dependencies> - <build> - <finalName>tracker-server</finalName> - <outputDirectory>target/classes</outputDirectory> - <sourceDirectory>src</sourceDirectory> - <testSourceDirectory>test</testSourceDirectory> - <resources> - <resource> - <directory>src</directory> - <excludes> - <exclude>**/*.java</exclude> - </excludes> - </resource> - </resources> + <build> + <finalName>tracker-server</finalName> + <outputDirectory>target/classes</outputDirectory> + <sourceDirectory>src</sourceDirectory> + <testSourceDirectory>test</testSourceDirectory> + <resources> + <resource> + <directory>src</directory> + <excludes> + <exclude>**/*.java</exclude> + </excludes> + </resource> + </resources> - <plugins> - <plugin> - <artifactId>maven-dependency-plugin</artifactId> - <version>2.5</version> - <executions> - <execution> - <id>copy-dependencies</id> - <phase>package</phase> - <goals> - <goal>copy-dependencies</goal> - </goals> - <configuration> - <outputDirectory>${project.build.directory}/lib</outputDirectory> - <excludeArtifactIds>junit</excludeArtifactIds> - <excludeTransitive>true</excludeTransitive> - </configuration> - </execution> - </executions> - </plugin> - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-jar-plugin</artifactId> - <version>2.4</version> - <configuration> - <archive> - <manifest> - <mainClass>org.traccar.Main</mainClass> - <addClasspath>true</addClasspath> - <classpathPrefix>lib/</classpathPrefix> - </manifest> - </archive> - </configuration> - </plugin> - </plugins> + <plugins> + <plugin> + <artifactId>maven-dependency-plugin</artifactId> + <executions> + <execution> + <phase>install</phase> + <goals> + <goal>copy-dependencies</goal> + </goals> + <configuration> + <outputDirectory>${project.build.directory}/lib</outputDirectory> + <excludeArtifactIds>junit</excludeArtifactIds> + <excludeTransitive>true</excludeTransitive> + </configuration> + </execution> + </executions> + </plugin> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-jar-plugin</artifactId> + <configuration> + <archive> + <manifest> + <mainClass>org.traccar.Main</mainClass> + <addClasspath>true</addClasspath> + <classpathPrefix>lib/</classpathPrefix> + </manifest> + </archive> + </configuration> + </plugin> + </plugins> - </build> -</project>
\ No newline at end of file + </build> +</project> diff --git a/setup/windows/windows.cfg b/setup/windows/windows.cfg index 3487189f6..273b0700b 100644 --- a/setup/windows/windows.cfg +++ b/setup/windows/windows.cfg @@ -16,7 +16,7 @@ <!-- Create database schema -->
<entry key="database.initialize">
CREATE TABLE IF NOT EXISTS devices (id INT IDENTITY, imei VARCHAR(16));
- CREATE TABLE IF NOT EXISTS positions (device_id INT, time TIMESTAMP, valid BOOLEAN, latitude DOUBLE, longitude DOUBLE, speed DOUBLE, course DOUBLE, power DOUBLE, mode INT);
+ CREATE TABLE IF NOT EXISTS positions (device_id INT, time TIMESTAMP, valid BOOLEAN, latitude DOUBLE, longitude DOUBLE, speed DOUBLE, course DOUBLE, power DOUBLE);
</entry>
<!-->
@@ -72,12 +72,11 @@ speed - Double
course - Double
power - Double (NULL for some protocols)
- mode - Integer
extended_info - String (XML)
<-->
<entry key="database.insertPosition">
INSERT INTO positions (device_id, time, valid, latitude, longitude, speed, course, power)
- VALUES (:device_id, :time, :valid, :latitude, :longitude, :speed, :course, :power, :mode)
+ VALUES (:device_id, :time, :valid, :latitude, :longitude, :speed, :course, :power)
</entry>
<!-- Web interface port -->
@@ -85,7 +84,7 @@ <entry key="http.port">8082</entry>
<!-- Logging options -->
- <entry key="logger.enable">true</entry>
+ <entry key="logger.enable">false</entry>
<entry key="logger.file">[LOG]</entry>
<!-- Xexun server configuration -->
@@ -137,10 +136,5 @@ <entry key="meiligao.enable">true</entry>
<entry key="meiligao.port">5009</entry>
<entry key="meiligao.resetDelay">0</entry>
-
- <!-- ST210 server configuration -->
- <entry key="st210.enable">true</entry>
- <entry key="st210.port">5010</entry>
- <entry key="st210.resetDelay">0</entry>
</properties>
diff --git a/setup/windows/windowsPG.cfg b/setup/windows/windowsPG.cfg deleted file mode 100644 index 28e29dbad..000000000 --- a/setup/windows/windowsPG.cfg +++ /dev/null @@ -1,150 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?>
-
-<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
-
-<properties>
-
- <!-- Global confiduration -->
- <entry key="database.driver">org.postgresql.Driver</entry>
- <entry key="database.url">jdbc:postgresql:traccar</entry>
- <entry key="database.user">postgres</entry>
- <entry key="database.password">postgres</entry>
-
- <!-- Database refresh delay in seconds -->
- <entry key="database.refreshDelay">300</entry>
-
- <!-- Create database schema -->
- <entry key="database.initialize">
- CREATE SEQUENCE devicesSQ START 1 INCREMENT 1;
- CREATE SEQUENCE positionsSQ START 1 INCREMENT 1;
- CREATE TABLE devices (id int8 NOT NULL,imei varchar(16) NOT NULL,phonenumber varchar(255),uniqueid varchar(255),CONSTRAINT devices_pkey PRIMARY KEY (id)) WITH (OIDS=FALSE);
- ALTER TABLE devices OWNER TO postgres;
- CREATE TABLE positions (id int8 NOT NULL,address varchar(255),altitude float8,course float8,extendedinfo varchar(255),latitude float8 NOT NULL,longitude float8 NOT NULL,power float8 NOT NULL,speed float8,"time" timestamp NOT NULL,"valid" bool,device_id int8 NOT NULL,"mode" int4,CONSTRAINT positions_pkey PRIMARY KEY (id),CONSTRAINT fk_device FOREIGN KEY (device_id) REFERENCES devices (id) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION) WITH (OIDS=FALSE);
- ALTER TABLE positions OWNER TO postgres;
- </entry>
-
- <!-->
- id - Long
- imei - String
- <-->
- <entry key="database.selectDevice">
- SELECT id, imei
- FROM devices
- </entry>
-
- <!-->
- imei - String
- <-->
- <entry key="database.insertDevice">
- INSERT INTO devices (id,imei)
- VALUES (nextval('devicesSQ'),:imei)
- </entry>
-
- <!-->
- id - Long
- imei - String
- <-->
- <entry key="database.updateDevice">
- UPDATE devices
- SET imei = :imei
- WHERE id = :id
- </entry>
-
- <!-->
- id - Long
- <-->
- <entry key="database.deleteDevice">
- DELETE FROM devices
- WHERE id = :id
- </entry>
-
- <!-->
- device_id - Long
- <-->
- <entry key="database.selectPosition">
- SELECT *
- FROM positions
- WHERE device_id = :device_id
- </entry>
-
- <!-->
- device_id - Long
- time - Date
- valid - Boolean
- latitude - Double
- longitude - Double
- speed - Double
- course - Double
- power - Double (NULL for some protocols)
- mode - Integer
- extended_info - String (XML)
- <-->
- <entry key="database.insertPosition">
- INSERT INTO positions (id, device_id, time, valid, latitude, longitude, speed, course, power, mode)
- VALUES (nextval('positionsSQ'),:device_id, :time, :valid, :latitude, :longitude, :speed, :course, :power, :mode)
- </entry>
-
- <!-- Web interface port -->
- <entry key="http.enable">true</entry>
- <entry key="http.port">8082</entry>
-
- <!-- Logging options -->
- <entry key="logger.enable">true</entry>
- <entry key="logger.file">jornadaLOG</entry>
-
- <!-- Xexun server configuration -->
- <entry key="xexun.enable">false</entry>
- <entry key="xexun.port">5000</entry>
- <entry key="xexun.resetDelay">0</entry>
-
- <!-- Gps103 server configuration -->
- <entry key="gps103.enable">false</entry>
- <entry key="gps103.port">5001</entry>
- <entry key="gps103.resetDelay">0</entry>
-
- <!-- Tk103 server configuration -->
- <entry key="tk103.enable">false</entry>
- <entry key="tk103.port">5002</entry>
- <entry key="tk103.resetDelay">0</entry>
-
- <!-- Gl100 server configuration -->
- <entry key="gl100.enable">false</entry>
- <entry key="gl100.port">5003</entry>
- <entry key="gl100.resetDelay">0</entry>
-
- <!-- Gl200 server configuration -->
- <entry key="gl200.enable">false</entry>
- <entry key="gl200.port">5004</entry>
- <entry key="gl200.resetDelay">0</entry>
-
- <!-- T55 server configuration -->
- <entry key="t55.enable">false</entry>
- <entry key="t55.port">5005</entry>
- <entry key="t55.resetDelay">0</entry>
-
- <!-- Xexun 2 server configuration -->
- <entry key="xexun2.enable">false</entry>
- <entry key="xexun2.port">5006</entry>
- <entry key="xexun2.resetDelay">0</entry>
-
- <!-- AVL-08 server configuration -->
- <entry key="avl08.enable">false</entry>
- <entry key="avl08.port">5007</entry>
- <entry key="avl08.resetDelay">0</entry>
-
- <!-- Enfora server configuration -->
- <entry key="enfora.enable">false</entry>
- <entry key="enfora.port">5008</entry>
- <entry key="enfora.resetDelay">0</entry>
-
- <!-- Meiligao server configuration -->
- <entry key="meiligao.enable">false</entry>
- <entry key="meiligao.port">5009</entry>
- <entry key="meiligao.resetDelay">0</entry>
-
- <!-- ST-210 server configuration -->
- <entry key="st210.enable">true</entry>
- <entry key="st210.port">8801</entry>
- <entry key="st210.resetDelay">0</entry>
-
-</properties>
diff --git a/src/org/traccar/GenericPipelineFactory.java b/src/org/traccar/GenericPipelineFactory.java index 521b8bc74..c5e2cc812 100644 --- a/src/org/traccar/GenericPipelineFactory.java +++ b/src/org/traccar/GenericPipelineFactory.java @@ -59,7 +59,6 @@ public abstract class GenericPipelineFactory implements ChannelPipelineFactory { @Override public void log(ChannelEvent e) { - if (e instanceof MessageEvent) { MessageEvent event = (MessageEvent) e; String msg = "[" + ((InetSocketAddress) e.getChannel().getLocalAddress()).getPort() + " - "; @@ -111,7 +110,6 @@ public abstract class GenericPipelineFactory implements ChannelPipelineFactory { pipeline.addLast("geocoder", new ReverseGeocoderHandler(geocoder)); } pipeline.addLast("handler", new TrackerEventHandler(dataManager)); - return pipeline; } }
\ No newline at end of file diff --git a/src/org/traccar/Server.java b/src/org/traccar/Server.java index 32a2888cc..5a6b298c7 100644 --- a/src/org/traccar/Server.java +++ b/src/org/traccar/Server.java @@ -21,7 +21,6 @@ import java.sql.SQLException; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; -import java.util.Iterator; import java.util.LinkedList; import java.util.List; import java.util.Properties; @@ -30,7 +29,6 @@ import java.util.logging.Formatter; import java.util.logging.Level; import java.util.logging.LogRecord; import org.jboss.netty.buffer.ChannelBuffers; -import org.jboss.netty.channel.Channel; import org.jboss.netty.channel.ChannelPipeline; import org.jboss.netty.handler.codec.frame.DelimiterBasedFrameDecoder; import org.jboss.netty.handler.codec.frame.LengthFieldBasedFrameDecoder; @@ -49,521 +47,407 @@ import org.traccar.protocol.*; */ public class Server { - /** - * Server list - */ - private List<TrackerServer> serverList; - - private boolean loggerEnabled; - - public Server() { - serverList = new LinkedList<TrackerServer>(); - loggerEnabled = false; - } - - public boolean isLoggerEnabled() { - return loggerEnabled; - } - - private DataManager dataManager; - - private WebServer webServer; - - private ReverseGeocoder geocoder; - - public void mandaMSG() - { - - for (Iterator iterator = serverList.iterator(); iterator.hasNext();) { - TrackerServer type = (TrackerServer) iterator.next(); - if(type.getPort().equals(8801)){ - - for (Iterator it = type.getChannelGroup().iterator(); it.hasNext();) { - Channel chanel = (Channel) it.next(); - System.out.println(chanel.getRemoteAddress()); - - } - } - // System.out.println(type.getPort()); - - } + /** + * Server list + */ + private List<TrackerServer> serverList; + + private boolean loggerEnabled; + + public Server() { + serverList = new LinkedList<TrackerServer>(); + loggerEnabled = false; + } + + public boolean isLoggerEnabled() { + return loggerEnabled; + } + + private DataManager dataManager; + + private WebServer webServer; + + private ReverseGeocoder geocoder; + + /** + * Initialize + */ + public void init(String[] arguments) + throws IOException, ClassNotFoundException, SQLException { + + // Load properties + Properties properties = new Properties(); + if (arguments.length > 0) { + properties.loadFromXML(new FileInputStream(arguments[0])); + } + + dataManager = new DatabaseDataManager(properties); + + initLogger(properties); + initGeocoder(properties); + + initXexunServer(properties); + initGps103Server(properties); + initTk103Server(properties); + initGl100Server(properties); + initGl200Server(properties); + initT55Server(properties); + initXexun2Server(properties); + initAvl08Server(properties); + initEnforaServer(properties); + initMeiligaoServer(properties); + + // Initialize web server + if (Boolean.valueOf(properties.getProperty("http.enable"))) { + Integer port = Integer.valueOf(properties.getProperty("http.port", "8082")); + webServer = new WebServer(port, dataManager); + } + } + + /** + * Start + */ + public void start() { + if (webServer != null) { + webServer.start(); + } + for (Object server: serverList) { + ((TrackerServer) server).start(); + } } - /** - * Initialize - */ - public void init(String[] arguments) throws IOException, - ClassNotFoundException, SQLException { - - // Load properties - Properties properties = new Properties(); - if (arguments.length > 0) { - properties.loadFromXML(new FileInputStream(arguments[0])); - } - - dataManager = new DatabaseDataManager(properties); - - initLogger(properties); - initGeocoder(properties); - - initXexunServer(properties); - initGps103Server(properties); - initTk103Server(properties); - initGl100Server(properties); - initGl200Server(properties); - initT55Server(properties); - initXexun2Server(properties); - initAvl08Server(properties); - initEnforaServer(properties); - initMeiligaoServer(properties); - initST210Server(properties); - - // Initialize web server - if (Boolean.valueOf(properties.getProperty("http.enable"))) { - Integer port = Integer.valueOf(properties.getProperty("http.port","8082")); - webServer = new WebServer(port, dataManager); - } - } - - /** - * Start - */ - public void start() { - if (webServer != null) { - webServer.start(); - } - for (Object server : serverList) { - ((TrackerServer) server).start(); - } - } - - /** - * Stop - */ - public void stop() { - for (Object server : serverList) { - ((TrackerServer) server).stop(); - } - if (webServer != null) { - webServer.stop(); - } - } - - /** - * Destroy - */ - public void destroy() { - serverList.clear(); - } - - /** - * Initialize logger - */ - private void initLogger(Properties properties) throws IOException { - - loggerEnabled = Boolean.valueOf(properties.getProperty("logger.enable")); - - if (loggerEnabled) { - - String fileName = properties.getProperty("logger.file"); - if (fileName != null) { - - FileHandler file = new FileHandler(fileName, true); - - // Simple formatter - file.setFormatter(new Formatter() { - private final String LINE_SEPARATOR = System.getProperty("line.separator", "\n"); - - private final DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); - - public String format(LogRecord record) { - String line = dateFormat.format(new Date(record.getMillis())); - line += " " + record.getLevel().getName() + ": "; - line += formatMessage(record); - line += LINE_SEPARATOR; - return line; - } - }); - - // NOTE: Console logger level will remain INFO - Log.getLogger().setLevel(Level.ALL); - Log.getLogger().addHandler(file); - } - } - } - - private void initGeocoder(Properties properties) throws IOException { - if (Boolean.parseBoolean("geocoder.enable")) { - geocoder = new GoogleReverseGeocoder(); - } - } - - private boolean isProtocolEnabled(Properties properties, String protocol) { - String enabled = properties.getProperty(protocol + ".enable"); - if (enabled != null) { - return Boolean.valueOf(enabled); - } - return false; - } - - private Integer getProtocolPort(Properties properties, String protocol) { - String port = properties.getProperty(protocol + ".port"); - if (port != null) { - return Integer.valueOf(port); - } - return 5000; // Magic number - } - - private Integer getProtocolResetDelay(Properties properties, String protocol) { - String resetDelay = properties.getProperty(protocol + ".resetDelay"); - if (resetDelay != null) { - return Integer.valueOf(resetDelay); - } - return 0; - } - - /** - * Init Xexun server - */ - private void initXexunServer(Properties properties) throws SQLException { - - String protocol = "xexun"; - if (isProtocolEnabled(properties, protocol)) { - - TrackerServer server = new TrackerServer(getProtocolPort(properties, protocol)); - final Integer resetDelay = getProtocolResetDelay(properties,protocol); - - server.setPipelineFactory(new GenericPipelineFactory(server,dataManager, isLoggerEnabled(), geocoder) { - protected void addSpecificHandlers(ChannelPipeline pipeline) { - pipeline.addLast("frameDecoder", new XexunFrameDecoder()); - pipeline.addLast("stringDecoder", new StringDecoder()); - pipeline.addLast("objectDecoder", new XexunProtocolDecoder(getDataManager(), resetDelay)); - } - }); - - serverList.add(server); - Log.info("Activating protocol " + protocol + " @ " + getProtocolPort(properties, protocol)); - } - } - - /** - * Init Gps103 server - */ - private void initGps103Server(Properties properties) throws SQLException { - - String protocol = "gps103"; - if (isProtocolEnabled(properties, protocol)) { - - TrackerServer server = new TrackerServer(getProtocolPort( - properties, protocol)); - final Integer resetDelay = getProtocolResetDelay(properties, - protocol); - - server.setPipelineFactory(new GenericPipelineFactory(server, - dataManager, isLoggerEnabled(), geocoder) { - protected void addSpecificHandlers(ChannelPipeline pipeline) { - byte delimiter[] = { (byte) ';' }; - pipeline.addLast( - "frameDecoder", - new DelimiterBasedFrameDecoder(1024, ChannelBuffers - .wrappedBuffer(delimiter))); - pipeline.addLast("stringDecoder", new StringDecoder()); - pipeline.addLast("stringEncoder", new StringEncoder()); - pipeline.addLast("objectDecoder", - new Gps103ProtocolDecoder(getDataManager(), - resetDelay)); - } - }); - - serverList.add(server); - Log.info("Activating protocol " + protocol + " @ " + getProtocolPort(properties, protocol)); - } - } - - /** - * Init Tk103 server - */ - private void initTk103Server(Properties properties) throws SQLException { - - String protocol = "tk103"; - if (isProtocolEnabled(properties, protocol)) { - - TrackerServer server = new TrackerServer(getProtocolPort( - properties, protocol)); - final Integer resetDelay = getProtocolResetDelay(properties, - protocol); - - server.setPipelineFactory(new GenericPipelineFactory(server, - dataManager, isLoggerEnabled(), geocoder) { - protected void addSpecificHandlers(ChannelPipeline pipeline) { - byte delimiter[] = { (byte) ')' }; - pipeline.addLast( - "frameDecoder", - new DelimiterBasedFrameDecoder(1024, ChannelBuffers - .wrappedBuffer(delimiter))); - pipeline.addLast("stringDecoder", new StringDecoder()); - pipeline.addLast("stringEncoder", new StringEncoder()); - pipeline.addLast("objectDecoder", new Tk103ProtocolDecoder( - getDataManager(), resetDelay)); - } - }); - - serverList.add(server); - Log.info("Activating protocol " + protocol + " @ " + getProtocolPort(properties, protocol)); - } - } - - /** - * Init Gl100 server - */ - private void initGl100Server(Properties properties) throws SQLException { - - String protocol = "gl100"; - if (isProtocolEnabled(properties, protocol)) { - - TrackerServer server = new TrackerServer(getProtocolPort( - properties, protocol)); - final Integer resetDelay = getProtocolResetDelay(properties, - protocol); - - server.setPipelineFactory(new GenericPipelineFactory(server, - dataManager, isLoggerEnabled(), geocoder) { - protected void addSpecificHandlers(ChannelPipeline pipeline) { - byte delimiter[] = { (byte) 0x0 }; - pipeline.addLast( - "frameDecoder", - new DelimiterBasedFrameDecoder(1024, ChannelBuffers - .wrappedBuffer(delimiter))); - pipeline.addLast("stringDecoder", new StringDecoder()); - pipeline.addLast("stringEncoder", new StringEncoder()); - pipeline.addLast("objectDecoder", new Gl100ProtocolDecoder( - getDataManager(), resetDelay)); - } - }); - - serverList.add(server); - Log.info("Activating protocol " + protocol + " @ " + getProtocolPort(properties, protocol)); - } - } - - /** - * Init Gl200 server - */ - private void initGl200Server(Properties properties) throws SQLException { - - String protocol = "gl200"; - if (isProtocolEnabled(properties, protocol)) { - - TrackerServer server = new TrackerServer(getProtocolPort( - properties, protocol)); - final Integer resetDelay = getProtocolResetDelay(properties, - protocol); - - server.setPipelineFactory(new GenericPipelineFactory(server, - dataManager, isLoggerEnabled(), geocoder) { - protected void addSpecificHandlers(ChannelPipeline pipeline) { - byte delimiter[] = { (byte) '$' }; - pipeline.addLast( - "frameDecoder", - new DelimiterBasedFrameDecoder(1024, ChannelBuffers - .wrappedBuffer(delimiter))); - pipeline.addLast("stringDecoder", new StringDecoder()); - pipeline.addLast("stringEncoder", new StringEncoder()); - pipeline.addLast("objectDecoder", new Gl200ProtocolDecoder( - getDataManager(), resetDelay)); - } - }); - - serverList.add(server); - Log.info("Activating protocol " + protocol + " @ " + getProtocolPort(properties, protocol)); - } - } - - /** - * Init T55 server - */ - private void initT55Server(Properties properties) throws SQLException { - - String protocol = "t55"; - if (isProtocolEnabled(properties, protocol)) { - - TrackerServer server = new TrackerServer(getProtocolPort( - properties, protocol)); - final Integer resetDelay = getProtocolResetDelay(properties, - protocol); - - server.setPipelineFactory(new GenericPipelineFactory(server, - dataManager, isLoggerEnabled(), geocoder) { - protected void addSpecificHandlers(ChannelPipeline pipeline) { - byte delimiter[] = { (byte) '\r', (byte) '\n' }; - pipeline.addLast( - "frameDecoder", - new DelimiterBasedFrameDecoder(1024, ChannelBuffers - .wrappedBuffer(delimiter))); - pipeline.addLast("stringDecoder", new StringDecoder()); - pipeline.addLast("stringEncoder", new StringEncoder()); - pipeline.addLast("objectDecoder", new T55ProtocolDecoder( - getDataManager(), resetDelay)); - } - }); - - serverList.add(server); - Log.info("Activating protocol " + protocol + " @ " + getProtocolPort(properties, protocol)); - } - } - - /** - * Init Xexun 2 server - */ - private void initXexun2Server(Properties properties) throws SQLException { - - String protocol = "xexun2"; - if (isProtocolEnabled(properties, protocol)) { - - TrackerServer server = new TrackerServer(getProtocolPort( - properties, protocol)); - final Integer resetDelay = getProtocolResetDelay(properties, - protocol); - - server.setPipelineFactory(new GenericPipelineFactory(server, - dataManager, isLoggerEnabled(), geocoder) { - protected void addSpecificHandlers(ChannelPipeline pipeline) { - byte delimiter[] = { (byte) '\n' }; // tracker bug \n\r - pipeline.addLast( - "frameDecoder", - new DelimiterBasedFrameDecoder(1024, ChannelBuffers - .wrappedBuffer(delimiter))); - pipeline.addLast("stringDecoder", new StringDecoder()); - pipeline.addLast("objectDecoder", - new Xexun2ProtocolDecoder(getDataManager(), - resetDelay)); - } - }); - - serverList.add(server); - Log.info("Activating protocol " + protocol + " @ " + getProtocolPort(properties, protocol)); - } - } - - /** - * Init AVL-08 server - */ - private void initAvl08Server(Properties properties) throws SQLException { - - String protocol = "avl08"; - if (isProtocolEnabled(properties, protocol)) { - - TrackerServer server = new TrackerServer(getProtocolPort( - properties, protocol)); - final Integer resetDelay = getProtocolResetDelay(properties, - protocol); - - server.setPipelineFactory(new GenericPipelineFactory(server, - dataManager, isLoggerEnabled(), geocoder) { - protected void addSpecificHandlers(ChannelPipeline pipeline) { - byte delimiter[] = { (byte) '\r', (byte) '\n' }; - pipeline.addLast( - "frameDecoder", - new DelimiterBasedFrameDecoder(1024, ChannelBuffers - .wrappedBuffer(delimiter))); - pipeline.addLast("stringDecoder", new StringDecoder()); - pipeline.addLast("objectDecoder", new Avl08ProtocolDecoder( - getDataManager(), resetDelay)); - } - }); - - serverList.add(server); - Log.info("Activating protocol " + protocol + " @ " + getProtocolPort(properties, protocol)); - } - } - - /** - * Init Enfora server - */ - private void initEnforaServer(Properties properties) throws SQLException { - - String protocol = "enfora"; - if (isProtocolEnabled(properties, protocol)) { - - TrackerServer server = new TrackerServer(getProtocolPort( - properties, protocol)); - final Integer resetDelay = getProtocolResetDelay(properties, - protocol); - - server.setPipelineFactory(new GenericPipelineFactory(server, - dataManager, isLoggerEnabled(), geocoder) { - protected void addSpecificHandlers(ChannelPipeline pipeline) { - pipeline.addLast("frameDecoder", - new LengthFieldBasedFrameDecoder(1024, 0, 2, -2, 2)); - pipeline.addLast("objectDecoder", - new EnforaProtocolDecoder(getDataManager(), - resetDelay)); - } - }); - - serverList.add(server); - Log.info("Activating protocol " + protocol + " @ " + getProtocolPort(properties, protocol)); - } - } - - /** - * Init Meiligao server - */ - private void initMeiligaoServer(Properties properties) throws SQLException { - - String protocol = "meiligao"; - if (isProtocolEnabled(properties, protocol)) { - - TrackerServer server = new TrackerServer(getProtocolPort( - properties, protocol)); - final Integer resetDelay = getProtocolResetDelay(properties, - protocol); - - server.setPipelineFactory(new GenericPipelineFactory(server, - dataManager, isLoggerEnabled(), geocoder) { - protected void addSpecificHandlers(ChannelPipeline pipeline) { - pipeline.addLast("frameDecoder", - new LengthFieldBasedFrameDecoder(1024, 2, 2, -4, 4)); - pipeline.addLast("objectDecoder", - new MeiligaoProtocolDecoder(getDataManager(), - resetDelay)); - } - }); - - serverList.add(server); - Log.info("Activating protocol " + protocol + " @ " + getProtocolPort(properties, protocol)); - } - } - - private void initST210Server(Properties properties) throws SQLException { - - String protocol = "st210"; - if (isProtocolEnabled(properties, protocol)) { - - TrackerServer server = new TrackerServer(getProtocolPort( - properties, protocol)); - final Integer resetDelay = getProtocolResetDelay(properties, - protocol); - - server.setPipelineFactory(new GenericPipelineFactory(server, - dataManager, isLoggerEnabled(), geocoder) { - protected void addSpecificHandlers(ChannelPipeline pipeline) { - byte delimiter[] = { (byte) '\r' }; - pipeline.addLast( - "frameDecoder", - new DelimiterBasedFrameDecoder(1024, ChannelBuffers - .wrappedBuffer(delimiter))); - pipeline.addLast("stringDecoder", new StringDecoder()); - pipeline.addLast("objectDecoder", new ST210ProtocolDecoder( - getDataManager(), resetDelay)); - - } - }); - - serverList.add(server); - Log.info("Activating protocol " + protocol + " @ " + getProtocolPort(properties, protocol)); - - } - } + /** + * Stop + */ + public void stop() { + for (Object server: serverList) { + ((TrackerServer) server).stop(); + } + if (webServer != null) { + webServer.stop(); + } + } + + /** + * Destroy + */ + public void destroy() { + serverList.clear(); + } + + /** + * Initialize logger + */ + private void initLogger(Properties properties) throws IOException { + + loggerEnabled = Boolean.valueOf(properties.getProperty("logger.enable")); + + if (loggerEnabled) { + + String fileName = properties.getProperty("logger.file"); + if (fileName != null) { + + FileHandler file = new FileHandler(fileName, true); + + // Simple formatter + file.setFormatter(new Formatter() { + private final String LINE_SEPARATOR = + System.getProperty("line.separator", "\n"); + + private final DateFormat dateFormat = + new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); + + public String format(LogRecord record) { + String line = dateFormat.format(new Date(record.getMillis())); + line += " " + record.getLevel().getName() + ": "; + line += formatMessage(record); + line += LINE_SEPARATOR; + return line; + } + }); + + // NOTE: Console logger level will remain INFO + Log.getLogger().setLevel(Level.ALL); + Log.getLogger().addHandler(file); + } + } + } + + private void initGeocoder(Properties properties) throws IOException { + if (Boolean.parseBoolean("geocoder.enable")) { + geocoder = new GoogleReverseGeocoder(); + } + } + + private boolean isProtocolEnabled(Properties properties, String protocol) { + String enabled = properties.getProperty(protocol + ".enable"); + if (enabled != null) { + return Boolean.valueOf(enabled); + } + return false; + } + + private Integer getProtocolPort(Properties properties, String protocol) { + String port = properties.getProperty(protocol + ".port"); + if (port != null) { + return Integer.valueOf(port); + } + return 5000; // Magic number + } + + private Integer getProtocolResetDelay(Properties properties, String protocol) { + String resetDelay = properties.getProperty(protocol + ".resetDelay"); + if (resetDelay != null) { + return Integer.valueOf(resetDelay); + } + return 0; + } + + /** + * Init Xexun server + */ + private void initXexunServer(Properties properties) throws SQLException { + + String protocol = "xexun"; + if (isProtocolEnabled(properties, protocol)) { + + TrackerServer server = new TrackerServer(getProtocolPort(properties, protocol)); + final Integer resetDelay = getProtocolResetDelay(properties, protocol); + + server.setPipelineFactory(new GenericPipelineFactory(server, dataManager, isLoggerEnabled(), geocoder) { + protected void addSpecificHandlers(ChannelPipeline pipeline) { + pipeline.addLast("frameDecoder", new XexunFrameDecoder()); + pipeline.addLast("stringDecoder", new StringDecoder()); + pipeline.addLast("objectDecoder", new XexunProtocolDecoder(getDataManager(), resetDelay)); + } + }); + + serverList.add(server); + } + } + + /** + * Init Gps103 server + */ + private void initGps103Server(Properties properties) throws SQLException { + + String protocol = "gps103"; + if (isProtocolEnabled(properties, protocol)) { + + TrackerServer server = new TrackerServer(getProtocolPort(properties, protocol)); + final Integer resetDelay = getProtocolResetDelay(properties, protocol); + + server.setPipelineFactory(new GenericPipelineFactory(server, dataManager, isLoggerEnabled(), geocoder) { + protected void addSpecificHandlers(ChannelPipeline pipeline) { + byte delimiter[] = { (byte) ';' }; + pipeline.addLast("frameDecoder", + new DelimiterBasedFrameDecoder(1024, ChannelBuffers.wrappedBuffer(delimiter))); + pipeline.addLast("stringDecoder", new StringDecoder()); + pipeline.addLast("stringEncoder", new StringEncoder()); + pipeline.addLast("objectDecoder", new Gps103ProtocolDecoder(getDataManager(), resetDelay)); + } + }); + + serverList.add(server); + } + } + + /** + * Init Tk103 server + */ + private void initTk103Server(Properties properties) throws SQLException { + + String protocol = "tk103"; + if (isProtocolEnabled(properties, protocol)) { + + TrackerServer server = new TrackerServer(getProtocolPort(properties, protocol)); + final Integer resetDelay = getProtocolResetDelay(properties, protocol); + + server.setPipelineFactory(new GenericPipelineFactory(server, dataManager, isLoggerEnabled(), geocoder) { + protected void addSpecificHandlers(ChannelPipeline pipeline) { + byte delimiter[] = { (byte) ')' }; + pipeline.addLast("frameDecoder", + new DelimiterBasedFrameDecoder(1024, ChannelBuffers.wrappedBuffer(delimiter))); + pipeline.addLast("stringDecoder", new StringDecoder()); + pipeline.addLast("stringEncoder", new StringEncoder()); + pipeline.addLast("objectDecoder", new Tk103ProtocolDecoder(getDataManager(), resetDelay)); + } + }); + + serverList.add(server); + } + } + + /** + * Init Gl100 server + */ + private void initGl100Server(Properties properties) throws SQLException { + + String protocol = "gl100"; + if (isProtocolEnabled(properties, protocol)) { + + TrackerServer server = new TrackerServer(getProtocolPort(properties, protocol)); + final Integer resetDelay = getProtocolResetDelay(properties, protocol); + + server.setPipelineFactory(new GenericPipelineFactory(server, dataManager, isLoggerEnabled(), geocoder) { + protected void addSpecificHandlers(ChannelPipeline pipeline) { + byte delimiter[] = { (byte) 0x0 }; + pipeline.addLast("frameDecoder", + new DelimiterBasedFrameDecoder(1024, ChannelBuffers.wrappedBuffer(delimiter))); + pipeline.addLast("stringDecoder", new StringDecoder()); + pipeline.addLast("stringEncoder", new StringEncoder()); + pipeline.addLast("objectDecoder", new Gl100ProtocolDecoder(getDataManager(), resetDelay)); + } + }); + + serverList.add(server); + } + } + + /** + * Init Gl200 server + */ + private void initGl200Server(Properties properties) throws SQLException { + + String protocol = "gl200"; + if (isProtocolEnabled(properties, protocol)) { + + TrackerServer server = new TrackerServer(getProtocolPort(properties, protocol)); + final Integer resetDelay = getProtocolResetDelay(properties, protocol); + + server.setPipelineFactory(new GenericPipelineFactory(server, dataManager, isLoggerEnabled(), geocoder) { + protected void addSpecificHandlers(ChannelPipeline pipeline) { + byte delimiter[] = { (byte) '$' }; + pipeline.addLast("frameDecoder", + new DelimiterBasedFrameDecoder(1024, ChannelBuffers.wrappedBuffer(delimiter))); + pipeline.addLast("stringDecoder", new StringDecoder()); + pipeline.addLast("stringEncoder", new StringEncoder()); + pipeline.addLast("objectDecoder", new Gl200ProtocolDecoder(getDataManager(), resetDelay)); + } + }); + + serverList.add(server); + } + } + + /** + * Init T55 server + */ + private void initT55Server(Properties properties) throws SQLException { + + String protocol = "t55"; + if (isProtocolEnabled(properties, protocol)) { + + TrackerServer server = new TrackerServer(getProtocolPort(properties, protocol)); + final Integer resetDelay = getProtocolResetDelay(properties, protocol); + + server.setPipelineFactory(new GenericPipelineFactory(server, dataManager, isLoggerEnabled(), geocoder) { + protected void addSpecificHandlers(ChannelPipeline pipeline) { + byte delimiter[] = { (byte) '\r', (byte) '\n' }; + pipeline.addLast("frameDecoder", + new DelimiterBasedFrameDecoder(1024, ChannelBuffers.wrappedBuffer(delimiter))); + pipeline.addLast("stringDecoder", new StringDecoder()); + pipeline.addLast("stringEncoder", new StringEncoder()); + pipeline.addLast("objectDecoder", new T55ProtocolDecoder(getDataManager(), resetDelay)); + } + }); + + serverList.add(server); + } + } + + /** + * Init Xexun 2 server + */ + private void initXexun2Server(Properties properties) throws SQLException { + + String protocol = "xexun2"; + if (isProtocolEnabled(properties, protocol)) { + + TrackerServer server = new TrackerServer(getProtocolPort(properties, protocol)); + final Integer resetDelay = getProtocolResetDelay(properties, protocol); + + server.setPipelineFactory(new GenericPipelineFactory(server, dataManager, isLoggerEnabled(), geocoder) { + protected void addSpecificHandlers(ChannelPipeline pipeline) { + byte delimiter[] = { (byte) '\n' }; // tracker bug \n\r + pipeline.addLast("frameDecoder", + new DelimiterBasedFrameDecoder(1024, ChannelBuffers.wrappedBuffer(delimiter))); + pipeline.addLast("stringDecoder", new StringDecoder()); + pipeline.addLast("objectDecoder", new Xexun2ProtocolDecoder(getDataManager(), resetDelay)); + } + }); + + serverList.add(server); + } + } + + /** + * Init AVL-08 server + */ + private void initAvl08Server(Properties properties) throws SQLException { + + String protocol = "avl08"; + if (isProtocolEnabled(properties, protocol)) { + + TrackerServer server = new TrackerServer(getProtocolPort(properties, protocol)); + final Integer resetDelay = getProtocolResetDelay(properties, protocol); + + server.setPipelineFactory(new GenericPipelineFactory(server, dataManager, isLoggerEnabled(), geocoder) { + protected void addSpecificHandlers(ChannelPipeline pipeline) { + byte delimiter[] = { (byte) '\r', (byte) '\n' }; + pipeline.addLast("frameDecoder", + new DelimiterBasedFrameDecoder(1024, ChannelBuffers.wrappedBuffer(delimiter))); + pipeline.addLast("stringDecoder", new StringDecoder()); + pipeline.addLast("objectDecoder", new Avl08ProtocolDecoder(getDataManager(), resetDelay)); + } + }); + + serverList.add(server); + } + } + + /** + * Init Enfora server + */ + private void initEnforaServer(Properties properties) throws SQLException { + + String protocol = "enfora"; + if (isProtocolEnabled(properties, protocol)) { + + TrackerServer server = new TrackerServer(getProtocolPort(properties, protocol)); + final Integer resetDelay = getProtocolResetDelay(properties, protocol); + + server.setPipelineFactory(new GenericPipelineFactory(server, dataManager, isLoggerEnabled(), geocoder) { + protected void addSpecificHandlers(ChannelPipeline pipeline) { + pipeline.addLast("frameDecoder", new LengthFieldBasedFrameDecoder(1024, 0, 2, -2, 2)); + pipeline.addLast("objectDecoder", new EnforaProtocolDecoder(getDataManager(), resetDelay)); + } + }); + + serverList.add(server); + } + } + + /** + * Init Meiligao server + */ + private void initMeiligaoServer(Properties properties) throws SQLException { + + String protocol = "meiligao"; + if (isProtocolEnabled(properties, protocol)) { + + TrackerServer server = new TrackerServer(getProtocolPort(properties, protocol)); + final Integer resetDelay = getProtocolResetDelay(properties, protocol); + + server.setPipelineFactory(new GenericPipelineFactory(server, dataManager, isLoggerEnabled(), geocoder) { + protected void addSpecificHandlers(ChannelPipeline pipeline) { + pipeline.addLast("frameDecoder", new LengthFieldBasedFrameDecoder(1024, 2, 2, -4, 4)); + pipeline.addLast("objectDecoder", new MeiligaoProtocolDecoder(getDataManager(), resetDelay)); + } + }); + + serverList.add(server); + } + } } diff --git a/src/org/traccar/TrackerEventHandler.java b/src/org/traccar/TrackerEventHandler.java index 2a66a084f..e4e45a174 100644 --- a/src/org/traccar/TrackerEventHandler.java +++ b/src/org/traccar/TrackerEventHandler.java @@ -55,9 +55,7 @@ public class TrackerEventHandler extends SimpleChannelHandler { ", longitude: " + position.getLongitude() + ", altitude: " + position.getAltitude() + ", speed: " + position.getSpeed() + - ", course: " + position.getCourse() + - ", power: " + position.getPower() + - ", mode: " + position.getMode()); + ", course: " + position.getCourse()); } // Write position to database diff --git a/src/org/traccar/TrackerServer.java b/src/org/traccar/TrackerServer.java index f4830d778..da889d0a3 100644 --- a/src/org/traccar/TrackerServer.java +++ b/src/org/traccar/TrackerServer.java @@ -16,7 +16,6 @@ package org.traccar; import java.net.InetSocketAddress; -import java.util.Iterator; import java.util.concurrent.Executors; import org.jboss.netty.bootstrap.ServerBootstrap; import org.jboss.netty.channel.Channel; @@ -30,74 +29,60 @@ import org.jboss.netty.channel.socket.nio.NioServerSocketChannelFactory; */ public class TrackerServer extends ServerBootstrap { - /** - * Initialization - */ - private void init(Integer port, Integer threadPoolSize) { - - setPort(port); - - // Create channel factory - setFactory(new NioServerSocketChannelFactory( - Executors.newCachedThreadPool(), - Executors.newCachedThreadPool())); - } - - public TrackerServer(Integer port) { - init(port, 1); - } - - /** - * Server port - */ - private Integer port; - - public Integer getPort() { - return port; - } - - private void setPort(Integer newPort) { - port = newPort; - } - - /** - * Opened channels - */ - private ChannelGroup allChannels = new DefaultChannelGroup(); - - public ChannelGroup getChannelGroup() { - return allChannels; - } - - public void mandaMSG() { - - /* for (Iterator it = this.getChannelGroup().iterator(); it.hasNext();) { - Channel chanel = (Channel) it.next(); - System.out.println(chanel.getRemoteAddress()); - if(chanel.getRemoteAddress() !=null) - this.getChannelGroup().write("OI AMIGO", chanel.getRemoteAddress()); - - } -*/ - // System.out.println(type.getPort()); - - } - - /** - * Start server - */ - public void start() { - Channel channel = bind(new InetSocketAddress(getPort())); - getChannelGroup().add(channel); - } - - /** - * Stop server - */ - public void stop() { - ChannelGroupFuture future = getChannelGroup().close(); - future.awaitUninterruptibly(); - getFactory().releaseExternalResources(); - } + /** + * Initialization + */ + private void init(Integer port, Integer threadPoolSize) { + + setPort(port); + + // Create channel factory + setFactory(new NioServerSocketChannelFactory( + Executors.newCachedThreadPool(), + Executors.newCachedThreadPool())); + } + + public TrackerServer(Integer port) { + init(port, 1); + } + + /** + * Server port + */ + private Integer port; + + public Integer getPort() { + return port; + } + + private void setPort(Integer newPort) { + port = newPort; + } + + /** + * Opened channels + */ + private ChannelGroup allChannels = new DefaultChannelGroup(); + + public ChannelGroup getChannelGroup() { + return allChannels; + } + + /** + * Start server + */ + public void start() { + Channel channel = bind(new InetSocketAddress(getPort())); + getChannelGroup().add(channel); + } + + /** + * Stop server + */ + public void stop() { + ChannelGroupFuture future = getChannelGroup().close(); + future.awaitUninterruptibly(); + getFactory().releaseExternalResources(); + } } diff --git a/src/org/traccar/http/WebServer.java b/src/org/traccar/http/WebServer.java index e379a0a9a..6c79e6421 100644 --- a/src/org/traccar/http/WebServer.java +++ b/src/org/traccar/http/WebServer.java @@ -146,15 +146,14 @@ public class WebServer { Iterator<Position> i = dataManager.getPositions(Long.valueOf(deviceId)).iterator(); while (i.hasNext()) { Position position = i.next(); - out.format("{'device_id':%d,'time':'%s','valid':%b,'latitude':%s,'longitude':%s,'speed':%s,'course':%s,'mode':%d}", + out.format("{'device_id':%d,'time':'%tF %tT','valid':%b,'latitude':%f,'longitude':%f,'speed':%f,'course':%f}", position.getDeviceId(), - position.getTimeFormated(), + position.getTime(), position.getTime(), position.getValid(), - position.getLatitude().toString(), - position.getLongitude().toString(), - position.getSpeed().toString(), - position.getCourse().toString(), - position.getMode()); + position.getLatitude(), + position.getLongitude(), + position.getSpeed(), + position.getCourse()); if (i.hasNext()) out.print(","); } } diff --git a/src/org/traccar/model/DatabaseDataManager.java b/src/org/traccar/model/DatabaseDataManager.java index 2207d272b..384d87828 100644 --- a/src/org/traccar/model/DatabaseDataManager.java +++ b/src/org/traccar/model/DatabaseDataManager.java @@ -210,7 +210,6 @@ public class DatabaseDataManager implements DataManager { position.setSpeed(result.getDouble("speed")); position.setCourse(result.getDouble("course")); position.setPower(result.getDouble("power")); - position.setMode(result.getInt("mode")); positionList.add(position); } @@ -230,7 +229,6 @@ public class DatabaseDataManager implements DataManager { queryAddPosition.setDouble("speed", position.getSpeed()); queryAddPosition.setDouble("course", position.getCourse()); queryAddPosition.setDouble("power", position.getPower()); - queryAddPosition.setInt("mode", position.getMode()); queryAddPosition.setString("address", position.getAddress()); queryAddPosition.setString("extended_info", position.getExtendedInfo()); diff --git a/src/org/traccar/model/Position.java b/src/org/traccar/model/Position.java index e6ac46de1..b408dbbf2 100644 --- a/src/org/traccar/model/Position.java +++ b/src/org/traccar/model/Position.java @@ -15,7 +15,6 @@ */ package org.traccar.model; -import java.text.SimpleDateFormat; import java.util.Date; /** @@ -57,12 +56,6 @@ public class Position { public Date getTime() { return time; } - - public String getTimeFormated(){ - SimpleDateFormat df = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss"); - df.setLenient(false); - return df.format(time); - } public void setTime(Date time) { this.time = time; @@ -158,18 +151,6 @@ public class Position { public void setPower(Double power) { this.power = power; } - /** - * Mode / 1 - Parking | 2 - Driving - */ - private int mode; - - public int getMode() { - return mode; - } - - public void setMode(int mode) { - this.mode = mode; - } /** * Address diff --git a/src/web/index.html b/src/web/index.html index dcc4771db..cde73f47b 100644 --- a/src/web/index.html +++ b/src/web/index.html @@ -1,9 +1,7 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"> +<!doctype html> +<html> <head> -<title>Jornada Beta</title> -<meta http-equiv="content-type" content="text/html;charset=utf-8" /> - +<title>Traccar Manager</title> <link rel="stylesheet" type="text/css" href="http://cdn.sencha.io/ext-4.1.0-gpl/resources/css/ext-all.css" /> <script type="text/javascript" src="http://cdn.sencha.io/ext-4.1.0-gpl/ext-all.js"></script> @@ -760,7 +758,6 @@ Ext.onReady(function() { ] }); - Ext.define('Position', { extend: 'Ext.data.Model', fields: [ @@ -771,8 +768,7 @@ Ext.onReady(function() { {name: 'longitude', type: 'float'}, {name: 'speed', type: 'float'}, {name: 'course', type: 'float'}, - {name: 'power', type: 'float'}, - {name: 'mode', type: 'int'} + {name: 'power', type: 'float'} ] }); @@ -810,8 +806,7 @@ Ext.onReady(function() { 'longitude', 'speed', 'course', - 'power', - 'mode' + 'power' ], proxy: { type: 'ajax', @@ -829,7 +824,7 @@ Ext.onReady(function() { }); var devicesPanel = Ext.create('Ext.grid.Panel', { - title: 'Dispositivos', + title: 'Devices', region: 'west', split: true, width: 300, @@ -842,16 +837,16 @@ Ext.onReady(function() { tbar: [ { id: 'device_update', - text: 'Atualizar', + text: 'Update', handler : function() { devices.load(); } }, { id: 'device_add', - text: 'Incluir', + text: 'Add', handler : function() { - Ext.Msg.prompt('Incluir', 'IMEI do Dispositivo:', function(btn, text) { + Ext.Msg.prompt('Add', 'Device IMEI:', function(btn, text) { if (btn == 'ok') { devices.add({imei: text}); } @@ -860,10 +855,10 @@ Ext.onReady(function() { }, { id: 'device_remove', - text: 'Remover', + text: 'Remove', disabled: true, handler : function() { - Ext.Msg.confirm('Remover', 'Confirma remoção do item?', function(btn) { + Ext.Msg.confirm('Remove', 'Are you sure to remove item?', function(btn) { if (btn == 'yes') { devices.remove(devicesPanel.getSelectionModel().getLastSelected()); } @@ -872,10 +867,10 @@ Ext.onReady(function() { }, { id: 'device_edit', - text: 'Alterar', + text: 'Edit', disabled: true, handler : function() { - Ext.Msg.prompt('Alterar', 'IMEI do Dispositivo:', function(btn, text) { + Ext.Msg.prompt('Edit', 'Device IMEI:', function(btn, text) { if (btn == 'ok') { devicesPanel.getSelectionModel().getLastSelected().set('imei', text); } @@ -893,11 +888,11 @@ Ext.onReady(function() { Ext.getCmp('device_remove').enable(); Ext.getCmp('device_edit').enable(); - positions.getProxy().url = positionsUrl + '?deviceId=' + devicesPanel.getSelectionModel().getLastSelected().get('id'); + positions.getProxy().url = positionsUrl + '?deviceId=' + + devicesPanel.getSelectionModel().getLastSelected().get('id'); positions.load(); Ext.getCmp('position_update').enable(); - } - else { + } else { Ext.getCmp('position_update').disable(); positions.getProxy().url = positionsUrl; positions.load(); @@ -910,7 +905,7 @@ Ext.onReady(function() { }); var positionsPanel = Ext.create('Ext.grid.Panel', { - title: 'Posicionamentos', + title: 'Positions', region: 'south', split: true, height: 300, @@ -923,7 +918,7 @@ Ext.onReady(function() { tbar: [ { id: 'position_update', - text: 'Atualizar', + text: 'Update', disabled: true, handler : function() { positions.load(); @@ -931,18 +926,19 @@ Ext.onReady(function() { } ], columns: [ - {header: 'Id Dispositivo', dataIndex: 'device_id'}, - {header: 'Data/Hora',dataIndex: 'time', + {header: 'Device Id', dataIndex: 'device_id'}, + { + header: 'Time', + dataIndex: 'time', flex: 1, - renderer: Ext.util.Format.dateRenderer('d/m/Y H:i:s') + renderer: Ext.util.Format.dateRenderer('Y-m-d H:i:s') }, - {header: 'Válido', dataIndex: 'valid'}, + {header: 'Valid', dataIndex: 'valid'}, {header: 'Latitude', dataIndex: 'latitude'}, {header: 'Longitude', dataIndex: 'longitude'}, - {header: 'Velocidade', dataIndex: 'speed'}, - {header: 'Curso', dataIndex: 'course'}, - {header: 'Voltagem', dataIndex: 'power'}, - {header: 'Modo', dataIndex: 'mode'} + {header: 'Speed', dataIndex: 'speed'}, + {header: 'Course', dataIndex: 'course'}, + {header: 'Power', dataIndex: 'power'} ], listeners: { selectionchange: function(sender, selected, eOpts) { @@ -959,7 +955,7 @@ Ext.onReady(function() { }); var mapPanel = Ext.create('Ext.panel.Panel', { - title: 'Mapa', + title: 'Map', region: 'center', margins: {top: 5, bottom: 0, right: 5, left: 0}, @@ -41,9 +41,6 @@ echo "9. meiligao" echo "10. st210" (echo -n -e "SA200STT;317652;042;20120807;10:43:23;16d41;-15.618767;-056.083214;000.011;000.00;11;1;41557;12.21;000000;1;3205\r";) | nc -v localhost 8801 -echo "11. st210emg" -(echo -n -e "SA200EMG;317652;042;20120718;15:35:41;16d41;-15.618740;-056.083252;000.034;000.00;8;1;41548;12.17;110000;1\r";) | nc -v localhost 8801 - diff --git a/test/org/traccar/server/SocketCliente.java b/test/org/traccar/server/SocketCliente.java deleted file mode 100644 index c26c02e49..000000000 --- a/test/org/traccar/server/SocketCliente.java +++ /dev/null @@ -1,44 +0,0 @@ -package org.traccar.server; - -import java.io.IOException; -import java.io.PrintStream; -import java.net.Socket; - -public class SocketCliente { - - /** - * @param args - */ - public void SendMSG(String url, int port, String msg) { - - Socket s = null; - - PrintStream ps = null; - - try { - - s = new Socket(url, port); - - ps = new PrintStream(s.getOutputStream()); - - ps.println(msg); - - System.out.println("send"); - - } catch (IOException e) { - - System.out - .println("Some problem happened on send data to socket."); - - } finally { - - try { - s.close(); - } catch (IOException e) { - } - - } - - } - -} |